Windows C語言 實現線程同步 互斥量 信號量 及兩種的區別

互斥量與信號量實現方法類似:

 互斥量:

               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);//信號量數量加一

 

互斥量與信號量的區別:

             互斥量是保護資源在同一時刻只有一個訪問者能夠訪問,但不考慮順序性。

             信號量會控制訪問者的先後順序,相當於信號量在完成互斥量功能的前提下,可以有序甚至多個同時訪問。

             互斥量的加鎖和解鎖必須由同一線程分別對應使用,信號量可以由一個線程釋放,另一個線程得到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章