互斥對象 一、建立一個 HANDLE 類型變數 HANDLE hMutex;
二、hMutex=CreateMutex(NULL,TRUE,"Ticket"); CreateMutex 建立互斥對象
(在建立成功後要及時調用ReleaseMutex(hMutex); 去讓計數減一. )
三、 WaitForSingleObject(hMutex,INFINITE); 使用在需要同步的地方使用這個函數.實現同步
四、 ReleaseMutex(hMutex); 在使用等待對象後,得使用這個函數去釋放互斥鎖.樣本#include <windows.h>#include <iostream.h> DWORD WINAPI fun1Proc( LPVOIDlpParameter // thread data);DWORD WINAPI fun2Proc( LPVOID lpParameter // thread data );int ticket=100;HANDLE hMutex;void main(){ HANDLE handle1; HANDLE handle2; handle1=CreateThread(NULL,0,fun1Proc,NULL,0,NULL); handle2=CreateThread(NULL,0,fun2Proc,NULL,0,NULL); CloseHandle(handle1); CloseHandle(handle2); hMutex=CreateMutex(NULL,TRUE,"Ticket"); if (hMutex) { if(ERROR_ALREADY_EXISTS==GetLastError()){ cout<<"Thereis already have a Instance runing!!!"<<endl; return; } } // WaitForSingleObject(hMutex,INFINITE); // ReleaseMutex(hMutex); ReleaseMutex(hMutex); Sleep(4000);} DWORD WINAPI fun1Proc( LPVOID lpParameter // thread data ){ while (true) { WaitForSingleObject(hMutex,INFINITE); if(ticket>0){ Sleep(1); cout<<"Thisis fun1Proc sell "<< ticket --<<endl; } else{ break; } ReleaseMutex(hMutex); } WaitForSingleObject(hMutex,INFINITE); cout<<"fun1Procrunning"<<endl; ReleaseMutex(hMutex); return 0;} DWORD WINAPI fun2Proc( LPVOID lpParameter // thread data ){ while (TRUE) { WaitForSingleObject(hMutex,INFINITE); if(ticket>0){ Sleep(1); cout<<"Thisis fun2Proc sell "<<ticket --<<endl; } else{ break; } ReleaseMutex(hMutex); } WaitForSingleObject(hMutex,INFINITE); cout<<"fun2Procrunning"<<endl; ReleaseMutex(hMutex); return 0;}