所以我們有功能a
和b
。線程one
調用a
並且沒有其他線程可以調用a
或b
直到one
將調用b
。含義線程one
將能夠呼叫a
和a
和...和比a
,而one
還沒有呼叫b
其他線程想呼叫a
或b
等待。是否有可能與boost::mutex
做這樣的事情,以及如何做到這一點?Boost :: mutex - 是否可以將其鎖定在一個類功能中並在另一個類中解鎖?
2
A
回答
6
互斥量不是問題;這是鎖。最簡單的解決方案是 只是手動撥打mutex::lock()
和mutex::unlock()
,忘記 關於mutex::scoped_lock
;畢竟你不想鎖定 尊重範圍。這個問題是通常的問題;您可能想要在發生異常時釋放鎖。一種解決方案是 動態分配mutex::scoped_lock
,並使用std::auto_ptr
或boost::shared_ptr
來管理它。 (奇怪的是,無論是 boost::mutex::scoped_lock
也不std::lock_guard
是可移動的,所以你 爲了轉移所有權需要動態分配。)
3
它具有單獨的lock()
和unlock()
功能。讓互斥體成爲你的類的成員,然後調用這些相應的函數......但是我會找到一種替代方法 - 你可能有各種奇怪的情況(比如線程調用a
崩潰?)
2
有幾種方法去做吧。要麼你有你的互斥體作爲一個基類的屬性,然後繼承你的工作對象。或者發送一個互斥參考給每個工人階級。
1
這是可能的。請致電boost::mutex::lock()
從a
和boost::mutex::unlock()
從b
。
但請注意,如果在鎖定互斥鎖時拋出異常,應確保最終調用unlock
。而scoped_lock
會自動執行此操作,但您必須手動執行此操作。
相關問題
- 1. boost :: mutex /如何測試一個互斥鎖是否被鎖定
- 2. 如果足夠的活躍,可以boost :: mutex鎖定一個操作系統嗎?
- 3. 是否有可能在另一個css類中使用css類?
- 4. 可變boost :: mutex是否可以分開鎖定和等待函數?
- 5. 鎖定在一個基本類型
- 6. Objective-C - 是否可以拖動項目並將其鎖定在某個位置?
- 7. 如何鎖定一個線程,並等待鎖定將在另一個線程中釋放
- 8. 是否可以將css子類封裝在一個類中?
- 9. MVC鎖定和解鎖一個呼叫
- 10. 是否可以將一個VML嵌套在另一個VML中?
- 11. 鎖定一個類的功能,包括依賴項
- 12. 另一個鎖定問題
- 13. 如何在獲得某個分數後解鎖一個功能
- 14. 一個類中的事件是否可以在另一個類中觸發一個動作?
- 15. Boost/std綁定如何解決這樣的錯誤? (從一個類綁定功能,另一個類)
- 16. 檢查一個並行線程互斥鎖定或解鎖(後一個線程已經鎖定本身)
- 17. pthread_mutex更新不夠快,所以一個線程會「鎖定」鎖。
- 18. c + +使用一個類中的一類(一類),並調用其功能
- 19. 在類中使用靜態互斥鎖
- 20. 是否可以使用互斥體鎖定數據結構中的一個元素?
- 21. 在Python的另一個類中定義一個類是否有好處?
- 22. 是否可以鎖定一個重載的括號操作符?
- 23. 是否可以在一個類中創建子類?
- 24. 遞歸鎖(Mutex)與非遞歸鎖(Mutex)
- 25. 是否可以在一個類中使用create方法在OpenERP中插入另一個類表?
- 26. C++:Boost :: mutex單獨鎖定同一範圍內的多個變量
- 27. 是否可以在InterfaceBuilder中將一個UITableView放在另一個UITableView中?
- 28. 從C++中的另一個進程解鎖一個線程
- 29. 是否有可能讓鎖定或類似結構鎖定寫入?
- 30. 如何在另一個類中調用特定功能
如何做一個動態分配的互斥的幫助,如果是崩潰的線程持有互斥的事情嗎?畢竟互斥體不是由線程擁有*,它是由類擁有的? – Nim
它不是您動態分配的'mutex',而是'scoped_lock'。你可以像管理其他任何動態分配一樣「管理」它。 (這意味着你必須從鎖定的函數中返回它,並將它傳遞到釋放的函數中。) –
@James ... aha ...這將有助於正確讀取答案..緩慢的早晨.. 。:) – Nim