互斥量Mutex

#include <windows.h>
#include <iostream>
using namespace std;

DWORD WINAPI MyThreadProc1(LPVOID lpParameter);		//thread data
DWORD WINAPI MyThreadProc2(LPVOID lpParameter);

DWORD WINAPI MyThreadProc3(LPVOID);		//thread data
DWORD WINAPI MyThreadProc4(LPVOID);

int tickets=100;
HANDLE hMutex;

int main(){

	DWORD tid1=0,tid2=0;
	//HANDLE handle = CreateThread(NULL,0,MyThreadProc,NULL,0,&tid);

	HANDLE handle1 = CreateThread(NULL,0,MyThreadProc1,NULL,CREATE_SUSPENDED ,&tid1);		
	HANDLE handle2 = CreateThread(NULL,0,MyThreadProc2,NULL,CREATE_SUSPENDED ,&tid2);

	ResumeThread(handle1);	
	ResumeThread(handle2);	

	/*
	  int i = 0;
	  for(;i<100;i++)		
		cout<<"Main thread is running"<<endl;
	*/
	
	hMutex = CreateMutex(NULL,FALSE,NULL);

	Sleep(8000);

	CloseHandle(handle1);
	CloseHandle(handle2);

	cout<< "SubThread1 ID:" << hex << uppercase<< tid1 << endl;
	cout<< "SubThread2 ID:" << hex << uppercase<< tid2 << endl;

	cout<<"**************************************************"<<endl;

	HANDLE handle3 = CreateThread(NULL,0,MyThreadProc3,NULL,0 ,&tid1);		
	HANDLE handle4 = CreateThread(NULL,0,MyThreadProc4,NULL,0 ,&tid2);
	CloseHandle(handle3);
	CloseHandle(handle4);

	system("pause");
	return 0;
}

/*
WAIT_OBJECT_0 The state of the specified object is signaled. 
WAIT_TIMEOUT The time-out interval elapsed, and the object's state is nonsignaled. 

  */
DWORD WINAPI MyThreadProc1(
						  LPVOID lpParameter   // thread data
)
{
	//Sleep(20);
	//int i=0;
	
	while(tickets>0){
		//WaitForSingleObject(hMutex,INFINITE);
		DWORD dwCode = WaitForSingleObject(hMutex,5);
		if(dwCode == WAIT_TIMEOUT){
			cout<<endl<<"子线程1 等待超时"<<endl;
			continue;
		}
		cout<<"子线程1卖票:"<<tickets<<endl;
		--tickets;
		Sleep(15);
		ReleaseMutex(hMutex);
		
	}

	return 1;
}



DWORD WINAPI MyThreadProc2(
						  LPVOID lpParameter   // thread data
						  )
{
	//Sleep(20);
	//int i=0;
	while(tickets>0){
		//WaitForSingleObject(hMutex,INFINITE);
		DWORD dwCode = WaitForSingleObject(hMutex,5);
		if(dwCode == WAIT_TIMEOUT){
			cout<<endl<<"子线程2 等待超时"<<endl;
			continue;
		}
		cout<<"子线程2卖票:"<<tickets<<endl;
		--tickets;
		Sleep(15);
		ReleaseMutex(hMutex);
		
	}
		
	return 1;
}


DWORD WINAPI MyThreadProc3( LPVOID lpParameter )
{	
	DWORD dwCode = WaitForSingleObject(hMutex,5);
	if(dwCode == WAIT_TIMEOUT){
		cout<<endl<<"子线程3 等待超时"<<endl;
	}
	else if(dwCode == WAIT_ABANDONED){
		cout<<endl<<"子线程3 WAIT_ABANDONED"<<endl;
	}
	cout<<"子线程3运行"<<endl;
	return 1;
}
DWORD WINAPI MyThreadProc4( LPVOID lpParameter )
{	
	DWORD dwCode = WaitForSingleObject(hMutex,5);
	if(dwCode == WAIT_TIMEOUT){
		cout<<endl<<"子线程4 等待超时"<<endl;		
	}
	else if(dwCode == WAIT_ABANDONED){
		cout<<endl<<"子线程4 WAIT_ABANDONED"<<endl;
	}
	cout<<"子线程4运行"<<endl;
	return 1;
}

  

posted @ 2012-03-23 18:30  庚武  Views(223)  Comments(0Edit  收藏  举报