互斥量與信號量實現方法類似:
互斥量:
HANDLE hMutex = NULL;//在全局中定義一個句柄
hMutex = CreateMutex(NULL,FALSE,NULL); //建立互斥量
if (WaitForSingleObject(hMutex, INFINITE) == WAIT_OBJECT_0)//判斷現在是否可佔有互斥對象,INFINITE表示等待時間
ReleaseMutex(hMutex);//使用後釋放互斥量
WaitForSingleObject,ReleaseMutex,就是在兩個線程中存在資源佔用衝突時使用。
信號量:
HANDLE h_ThreadSem = NULL;
h_ThreadSem = CreateSemaphore(NULL,0,1,NULL);//第二個參數表示初始信號量數量,第三個參數表示信號量數量最大值
if (WaitForSingleObject(h_ThreadSem, INFINITE) == WAIT_OBJECT_0)
ReleaseSemaphore(h_ThreadSem,1,NULL);//信號量數量加一
互斥量與信號量的區別:
互斥量是保護資源在同一時刻只有一個訪問者能夠訪問,但不考慮順序性。
信號量會控制訪問者的先後順序,相當於信號量在完成互斥量功能的前提下,可以有序甚至多個同時訪問。
互斥量的加鎖和解鎖必須由同一線程分別對應使用,信號量可以由一個線程釋放,另一個線程得到。