www.pudn.com > os_example.rar > Semaphore.cpp


#include   
#include   
#include  
#include   
#define THREAD_INSTANCE_NUMBER	3 
 
//全局变量 
int iCounter=0; 
 
DWORD SubThread(void * pD) 
{ 
	int iID=(int)pD; 
	 
	//在内部重新打开 
	HANDLE hCounterIn=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"sam sp 44"); 
 
	for(int i=0;i<3;i++) 
	{ 
		cout << "Thread " << iID << " waits for object." << endl; 
		WaitForSingleObject(hCounterIn,INFINITE); 
		cout << "  Thread " << iID << " : do database access call." << endl; 
		Sleep(100); 
		cout << "  Thread " << iID << " : do database access call end." << endl; 
		ReleaseSemaphore(hCounterIn,1,NULL); 
	} 
	CloseHandle(hCounterIn); 
	return 0; 
 
} 
 
void main(void) 
{ 
	//创建信号灯 
	HANDLE hCounter=NULL; 
	if( (hCounter=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"sam sp 44"))==NULL) 
	{ 
		//如果没有其他进程创建这个信号灯,则重新创建 
		hCounter = CreateSemaphore(NULL,2/*initial count*/,2/*maximum count*/,"sam sp 44"); 
	} 
 
	// Create a thread; 
    cout << "CreateThread" << endl; 
 
	DWORD IDThread[THREAD_INSTANCE_NUMBER];  
   	HANDLE hThread[THREAD_INSTANCE_NUMBER]; 
	int i; 
 
	//创建线程 
	for (i=0;i