事件 訊號量 臨界區 互斥鎖

2021-08-22 14:42:14 字數 1344 閱讀 2906

handle createevent(

lpsecurity_attributes lpeventattributes,// 安全屬性

bool bmanualreset,// 復位方式

bool binitialstate,// 初始狀態 false建立時為未通知狀態 true建立時為已通知狀態

lpctstr lpname // 物件名稱

bmanualreset 為true時,waitforsingleobject(hevent, infinite)時,hevent事件變為已通知狀態後並不會改變hevent的狀態,即如果有多個執行緒同時等待hevent,那麼多個執行緒都會等待hevent,

我們必須通過resetevent函式來手工將事件的狀態復原到未通知狀態。

bmanualreset為false時,waitforsingleobject(hevent, infitine)呼叫結束後,heevent的事件會恢復為未通知狀態,如果需要其他執行緒能夠得到通知, 需要呼叫setevent函式再次將hevent的狀態變為已通知狀態。

臨界區 互斥鎖 乙個是核心物件 乙個是使用者物件

互斥鎖 事件 訊號量可以跨程序使用

事件當bmanualreset置為false時,與互斥鎖類似,

當bmanualreset置為true時,阻塞的所有執行緒都會被喚醒

訊號量可以通過linitialcount的值 更加靈活的控制多個執行緒的同步

handle createsemaphore(

lpsecurity_attributes lpsemaphoreattributes, // 安全屬性指標

long linitialcount, // 初始計數 為0表示不傳送訊號 iintialcount <= imaximumcount

long lmaximumcount, // 最大計數

lpctstr lpname // 物件名指標

dword waitforsingleobject(

handle hobject;

dword dwmilliseconds;

waitforsingleobject(hseamphore, infinite); //如果 linitialcount為0 該函式為阻塞 呼叫該函式會導致 linitialcount -1

bool releasesemaphore(

handle hsemaphore, // 訊號量控制代碼

long lreleasecount, // 計數遞增數量

lplong lppreviouscount // 先前計數

releasesemaphore(hsemaphore, 1, null) //呼叫該函式會導致 linitialcount -1

互斥鎖 臨界區 訊號量 事件的區別

引用位址 四種程序或執行緒同步互斥的控制方法 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。2 互斥量 為協調共同對乙個共享資源的單獨訪問而設計的。3 訊號量 為控制乙個具有有限數量使用者資源而設計。4 事 件 用來通知執行緒有一些事件已發生,從而啟動後繼任務的開...

互斥鎖 臨界區 訊號量 事件的區別

四種程序或執行緒同步互斥的控制方法 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。2 互斥量 為協調共同對乙個共享資源的單獨訪問而設計的。3 訊號量 為控制乙個具有有限數量使用者資源而設計。4 事 件 用來通知執行緒有一些事件已發生,從而啟動後繼任務的開始。臨界區...

臨界區 互斥 訊號量 事件區別

四種程序或執行緒同步互斥的控制方法 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。2 互斥量 為協調共同對乙個共享資源的單獨訪問而設計的。3 訊號量 為控制乙個具有有限數量使用者資源而設計。4 事 件 用來通知執行緒有一些事件已發生,從而啟動後繼任務的開始。臨界區...