boost 互斥體和鎖

2021-09-08 23:02:39 字數 713 閱讀 3878

1、共享資源是乙個自動鎖住的房間,互斥體是鑰匙,進入房間必須取鑰匙,離開房間應該還鑰匙。這就對應著互斥體的lock(取鑰匙)和unlock(還鑰匙)。

2、考慮下面的場景:還鑰匙的時候出現異常,會發生什麼?

導致死鎖,因為鑰匙歸還失敗,所有人都沒法再取到鑰匙。

3、如何解決這個問題?

想一下,動態分配記憶體存在類似的情況。如果忘記delete,會導致記憶體洩漏。它是如何解決的? 在棧上分配物件,要乙個特點,那就是離開作用域後,物件肯定要呼叫析構方法。利用這個特點,可以使用物件對指標封裝,在物件的析構方法中進行delete,就保證了一定會執行delete。這就是智慧型指標。因為智慧型指標,不是針對乙個特定型別的指標,因此把智慧型指標設計為類的模版,根據模版實參特例化乙個模板類。

同樣道理,也可以使用相同技術,對互斥體封裝。這就是 lock類模版。在lock的構造方法呼叫互斥體的lock方法,在lock的析構方法呼叫互斥體的unlock方法。

4、mutex是物件類,lock是模板類。

5、常用的互斥體有:

boost::mutex

boost::timed_mutex

boost::shared_mutex

boost::recursive_mutex

6、lock的類模版有:

boost::unique_lock

boost::shared_lock

對類模版特例化,可以生成不同的lock類。

boost互斥鎖 boost鎖使用總結

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

自旋鎖和互斥體

2.5 核心中的併發 隨著多核膝上型電腦時代的到來,對稱多處理器 smp 的使用不再被限於高科技使用者。smp和核心搶占是多執行緒執行的兩種場景。多個執行緒能夠同時操作共享的核心資料結構,因此,對這些資料結構的訪問必須被序列化。接下來,我們會討論併發訪問情況下保護共享核心資源的基本概念。我們以乙個簡...

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

互斥物件有利於實現多執行緒中資料的執行緒安全。執行緒呼叫鎖函式來獲得互斥物件的所有權,呼叫對應的解鎖函式來放棄所有權。互斥量可以是遞迴或非遞迴的,並且可以同時把所有權賦給多個執行緒。boost.thread提供獨佔的遞迴 非遞迴互斥量,以及共享 多讀單一寫 互斥量。basiclockable概念 b...