lock_guard和unique_lock

lock_guard和unique_lock都是RAII機制下的鎖,即依靠對象的創(chuàng)建和銷毀也就是其生命周期來自動實現(xiàn)一些邏輯,而這兩個對象就是在創(chuàng)建時自動加鎖,在銷毀時自動解鎖。所以如果僅僅是依靠對象生命周期實現(xiàn)加解鎖的話,兩者是相同的,都可以用,因跟生命周期有關(guān),所以有時會用花括號指定其生命周期。但lock_guard的功能僅限于此。unique_lock是對lock_guard的擴展,允許在生命周期內(nèi)再調(diào)用lock和unlock來加解鎖以切換鎖的狀態(tài)。

根據(jù)linux下條件變量的機制,condition_variable在wait成員函數(shù)內(nèi)部會先調(diào)用參數(shù)unique_lock的unlock臨時解鎖,讓出鎖的擁有權(quán)(以讓其它線程獲得該鎖使用權(quán)加鎖,改變條件,解鎖),然后自己等待notify信號,等到之后,再調(diào)用參數(shù)unique_lock的lock加鎖,處理相關(guān)邏輯,最后unique_lock對象銷毀時自動解鎖。

也即是說condition_variable的wait函數(shù)內(nèi)偽代碼如下:

condition_variable::wait(std::unique_lock<std::mutex>&?lk){

??????lk.unlock();

??????waiting_signal();

??????lk.lock();

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • C++多線程編程中通常會對共享的數(shù)據(jù)進行寫保護,以防止多線程在對共享數(shù)據(jù)成員進行讀寫時造成資源爭搶導(dǎo)致程序出現(xiàn)未定...
    貳爺閱讀 2,569評論 0 1
  • std::lock_guard std::lock_guard是RAII模板類的簡單實現(xiàn),功能簡單。 std::u...
    宋大壯閱讀 5,414評論 0 2
  • 參考cplusplus參考cppreference 1.mutex 用于保護臨界區(qū)(critical sectio...
    王偵閱讀 4,301評論 0 0
  • 最近是恰好寫了一些c++11多線程有關(guān)的東西,就寫一下筆記留著以后自己忘記回來看吧,也不是專門寫給讀者看的,我就想...
    編程小世界閱讀 2,542評論 1 2
  • 點點秋雨落輕寒, 小花小草都悠然。 不知光華多易逝, 也作春雨享清閑。
    飛翔的小豬1閱讀 319評論 0 3