2009-12-10 112 views
1

我有一個用C++編寫的多線程應用程序。我正在使用互斥鎖進行文件寫入。我懷疑在執行該程序的某個地方,互斥體沒有被釋放。
所以我想知道是否有一種方法來檢查互斥鎖和釋放文件,編程或其他方式。
我正在SuseLinux上運行代碼,順便說一句。
謝謝,檢查互斥量版本

+0

問題其實是另一回事,看似愚蠢。我沒有在一些構造函數中初始化一個bool變量,假設默認情況下它會被初始化爲false。 現在,如果你想知道我怎麼會困惑是否是由於互斥或錯誤初始化;好吧,如果你看了代碼,我想你會明白的。無論如何,謝謝你的答案。他們很有幫助。 – rabin 2009-12-13 23:34:58

回答

8

歡迎來到調試多線程代碼的美妙世界。沒有靈丹妙藥可以解決你的問題,但至少你應該使用成語來管理你的互斥。這意味着將互斥體封裝在一個C++類中,該類聲明該類的實例被創建時聲明該互斥體,並在它(該類實例)被銷燬時釋放該互斥體。您也可以有利地記錄索賠/版本,但請注意,這可能會引入計時錯誤和人爲因素。

+2

Boost :: Threads庫擁有一套非常好的便攜式RAII互斥鎖......可以幫助您避免因持續鎖定造成的死鎖。 – paxos1977 2009-12-10 20:54:36