多執行緒中互斥物件操作要注意的兩點

2021-06-04 22:52:03 字數 697 閱讀 3123

互斥物件中,包含乙個執行緒id和乙個計數器。執行緒id表示擁有互斥物件的執行緒id,計數器表示互斥物件被同乙個

互斥物件中用到的api函式:

handle createmutex(lpsecurity_attributes   lpmutexattributees,    bool   binitialowner,  lpctstr  lpname)

這三個引數中 ,第一和第三個引數好理解。要注意的是第二引數 binitialowner:表示該互斥物件的擁有者。如果為true,表示建立該互斥物件的執行緒擁有其所有權。如果為false,表示建立該互斥物件的執行緒不能擁有其所有權。

如果該函式呼叫成功則返回新建立的互斥物件控制代碼。否則返回null

舉個例子:

在主函式中建立了互斥

handle h1=createmutex(null,false,null)//建立它的執行緒不對它有所有權,計數器為0,互斥物件為有訊號

handle h1=createmutex(null,true,null)//建立它的執行緒對它有所有權,計數器為1,需呼叫releasemutex()函式,才使互斥訊號為有訊號,計數器為0

第二點 如果子執行緒已經申請了互斥物件,但並沒有呼叫releasemutex()函式釋放互斥物件,那麼該執行緒一直占有互斥物件。但是如果子執行緒要執行結束了,此時互斥物件為有訊號,計數器為0.

形式如下:

void p()

多執行緒中的互斥鎖

互斥量mutex 類物件,理解成一把鎖,多個執行緒嘗試用lock 成員函式來對其加鎖,只有乙個執行緒能夠鎖定成功 lock 與unlock 須成對存在,很容易出問題,所以引入 std lock guard 類模板,對於忘記新增unlock 會自動新增,類似於智慧型指標的功能。鎖住的 量多少成為粒度的...

多執行緒程式設計需要注意的問題

1 執行緒的優先順序 多執行緒程式設計中要注意協調好各個執行緒的優先順序。一般來說,控制線程的優先順序要高於 worker執行緒。這樣做,可以保證client 終端使用者或者其他模組 盡快得到響應。當控 制執行緒是與終端使用者互動的介面執行緒時更應如此,如果介面執行緒優先順序較低,介面可能 較長時間...

C 多執行緒中的互斥量和互斥鎖

c 多執行緒競爭時經常用到互斥量用std mutex,它可以單獨使用,也可以和互斥鎖在一起使用。std mutex單獨使用的話就lock 加鎖,用unlock 解鎖。為了方便的話可以用用互斥鎖lock guard,lock guard會在建立時自動加鎖,並且在作用域結束時自動析構釋放鎖。lock g...