所以我們有功能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. QMutex鎖定在一個線程中,並在另一個線程中解鎖
- 3. 使用Mutex鎖定/解鎖並在C中廣播pthreads
- 4. 如何讓一個線程解鎖另一個線程鎖定的互斥鎖?
- 5. 是否可以優先鎖定一個鎖?
- 6. 如果足夠的活躍,可以boost :: mutex鎖定一個操作系統嗎?
- 7. 是否有可能在另一個css類中使用css類?
- 8. 可變boost :: mutex是否可以分開鎖定和等待函數?
- 9. 創建一個解鎖/鎖定頁面功能
- 10. 將一個表鎖鎖定行鎖定
- 11. 鎖定在一個基本類型
- 12. Objective-C - 是否可以拖動項目並將其鎖定在某個位置?
- 13. 在另一個類中使用一個類的功能
- 14. 是否可以將css子類封裝在一個類中?
- 15. 如何鎖定一個線程,並等待鎖定將在另一個線程中釋放
- 16. Boost:可能從任何線程解鎖互斥鎖?
- 17. 強制解鎖一個可重入鎖
- 18. jQuery - 你可以檢查一個類是否有另一個類?
- 19. Pthread Mutex鎖定
- 20. 一個表可以被另一個表鎖定嗎?
- 21. 是否可以將一個VML嵌套在另一個VML中?
- 22. MVC鎖定和解鎖一個呼叫
- 23. 是否可以在另一個類中裝飾公共屬性?
- 24. 鎖定一個類的功能,包括依賴項
- 25. 另一個鎖定問題
- 26. 是否可以鎖定一個存儲桶以便寫入?
- 27. 如何鎖定表並在mysql中創建另一個表
- 28. 如何在獲得某個分數後解鎖一個功能
- 29. 一個類中的事件是否可以在另一個類中觸發一個動作?
- 30. 如何打開一個文件並將其鎖定在C?
如何做一個動態分配的互斥的幫助,如果是崩潰的線程持有互斥的事情嗎?畢竟互斥體不是由線程擁有*,它是由類擁有的? – Nim
它不是您動態分配的'mutex',而是'scoped_lock'。你可以像管理其他任何動態分配一樣「管理」它。 (這意味着你必須從鎖定的函數中返回它,並將它傳遞到釋放的函數中。) –
@James ... aha ...這將有助於正確讀取答案..緩慢的早晨.. 。:) – Nim