boost互斥鎖 boost 同步 互斥量的概念

2021-10-18 05:19:43 字數 1267 閱讀 4768

互斥物件有利於實現多執行緒中資料的執行緒安全。

執行緒呼叫鎖函式來獲得互斥物件的所有權,呼叫對應的解鎖函式來放棄所有權。

互斥量可以是遞迴或非遞迴的,並且可以同時把所有權賦給多個執行緒。

boost.thread提供獨佔的遞迴、非遞迴互斥量,以及共享(多讀單一寫)互斥量。

basiclockable概念

basiclockable是獨佔模型。

滿足這個模型的物件需要實現兩個介面

m.lock()

m.unlock()

呼叫lock()來獲取鎖的所有權,同時必須呼叫unlock()來釋放所有權。

當前執行緒呼叫lock()時,會阻塞,直到獲得鎖的所有權。

lockabe概念

乙個型別要滿足lockable要求,它需要滿足basiclockable,同時滿足1個介面

m.try_lock()

try_lock()獲取的鎖的所有權,必須通過unlock()來釋放

當前執行緒呼叫try_lock()來嘗試獲得鎖的所有權,並不會阻塞,如果獲得所有鎖,try_lock()會返回true。

recursive lockable概念

沒有介面要求,只有3個特性

使用者可以要求傳入演算法的互斥量是遞迴的。

無法通過模板的元程式設計來檢查乙個lockable是否可遞迴,因此才引入3個特性

timedlockable概念

乙個型別要滿足timedlockable要求,它需要滿足lockable,同時滿足4個介面

m.try_lock_until(abs_time)

m.try_lock_for(rel_time)

m.timed_lock(abs_time)

m.timed_lock(rel_time)

執行緒將被阻塞,直到獲得所有權或指定的時間結束。如果時間結束還未獲得所有權,那麼按try_lock()處理。

如果獲得所有權,會返回true。

sharedlockable概念

乙個型別要滿足sharedlockable要求,它需要滿足timedlockable,同時滿足6個介面

m.lock_shared()

m.try_lock_shared()

m.try_lock_shared_for(rel_time)

m.try_lock_shared_until(abs_time)

m.unlock_shared()

m.timed_lock_shared(abs_time)

共享鎖必須呼叫unlock_shared()來釋放

boost互斥鎖 boost鎖使用總結

boost鎖的概述 boost庫中提供了mutex類與lock類,通過組合可以輕易的構建讀寫鎖與互斥鎖。舉個通俗的例子,如果共享資源是乙個自動鎖住的房間,互斥體是鑰匙,進入房間必須取鑰匙,離開房間應該還鑰匙。這就對應著互斥體的lock 取鑰匙 和unlock 還鑰匙 動態分配記憶體存在類似的情況。如...

boost實踐之互斥鎖

include std mutex socket list mu socket list mu lock socket list mu unlock 使用mutex是不安全的,當乙個執行緒在解鎖之前異常退出了,那麼其它被阻塞的執行緒就無法繼續下去.std lock guardlock socket ...

boost 互斥體和鎖

1 共享資源是乙個自動鎖住的房間,互斥體是鑰匙,進入房間必須取鑰匙,離開房間應該還鑰匙。這就對應著互斥體的lock 取鑰匙 和unlock 還鑰匙 2 考慮下面的場景 還鑰匙的時候出現異常,會發生什麼?導致死鎖,因為鑰匙歸還失敗,所有人都沒法再取到鑰匙。3 如何解決這個問題?想一下,動態分配記憶體存...