互斥量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;

}

  

你可能感兴趣的:(互斥)