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 事 件 用來通知執行緒有一些事件已發生,從而啟動後繼任務的開始。臨界區...