boost 互斥體和鎖


 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<T> 

  boost::shared_lock<T> 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM