2011-08-19 63 views

回答

6

互斥量不是問題;這是鎖。最簡單的解決方案是 只是手動撥打mutex::lock()mutex::unlock(),忘記 關於mutex::scoped_lock;畢竟你不想鎖定 尊重範圍。這個問題是通常的問題;您可能想要在發生異常時釋放鎖。一種解決方案是 動態分配mutex::scoped_lock,並使用std::auto_ptrboost::shared_ptr來管理它。 (奇怪的是,無論是 boost::mutex::scoped_lock也不std::lock_guard是可移動的,所以你 爲了轉移所有權需要動態分配。)

+0

如何做一個動態分配的互斥的幫助,如果是崩潰的線程持有互斥的事情嗎?畢竟互斥體不是由線程擁有*,它是由類擁有的? – Nim

+0

它不是您動態分配的'mutex',而是'scoped_lock'。你可以像管理其他任何動態分配一樣「管理」它。 (這意味着你必須從鎖定的函數中返回它,並將它傳遞到釋放的函數中。) –

+1

@James ... aha ...這將有助於正確讀取答案..緩慢的早晨.. 。:) – Nim

3

它具有單獨的lock()unlock()功能。讓互斥體成爲你的類的成員,然後調用這些相應的函數......但是我會找到一種替代方法 - 你可能有各種奇怪的情況(比如線程調用a崩潰?)

2

有幾種方法去做吧。要麼你有你的互斥體作爲一個基類的屬性,然後繼承你的工作對象。或者發送一個互斥參考給每個工人階級。

1

這是可能的。請致電boost::mutex::lock()aboost::mutex::unlock()b

但請注意,如果在鎖定互斥鎖時拋出異常,應確保最終調用unlock。而scoped_lock會自動執行此操作,但您必須手動執行此操作。

相關問題