互斥物件有利於實現多執行緒中資料的執行緒安全。
執行緒呼叫鎖函式來獲得互斥物件的所有權,呼叫對應的解鎖函式來放棄所有權。
互斥量可以是遞迴或非遞迴的,並且可以同時把所有權賦給多個執行緒。
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 如何解決這個問題?想一下,動態分配記憶體存...