2011-10-05 31 views
0

我有一個boost :: mutex在兩個線程中使用。第一個線程不斷鎖定和解鎖互斥鎖。第二個線程僅在特定條件下使用互斥鎖。當這種情況發生時,兩個線程都會鎖定在鎖上。什麼可能造成這種情況?這兩個線程阻塞在調用boost :: mutex :: lock()

關於我的程序的一些隨機事實:互斥量是兩個線程之間共享的類的數據成員。在第二個線程中,我將一個指針傳遞給使用它的函數的互斥量,但在第一個線程中,我通過引用使用了互斥量。

+0

你可以發佈代碼指示線程如何使用互斥? – Tim

+0

只是一個想法。這些函數之間是否有遞歸調用或循環依賴關係?如果是的話,你將不得不使用遞歸互斥鎖(如果這是你想要的),或者只是複習你的代碼,因爲它會創建經典的死鎖。 –

+0

我發現在第一個線程的關鍵部分中,一個Win32函數被調用,應該只從第二個線程調用該線程,因爲該線程創建了Win32窗口。我不確定在這種情況下我應該做什麼禮節。答案與我提出的問題無關。我們是否投票結束? –

回答

1

您是否記得在發出信號後解鎖主線程中的互斥鎖?或者,你是否陷入僵局?

+0

是的,發生了死鎖,但不是因爲我使用的互斥鎖,而是因爲一個不同的函數導致兩個線程阻塞我認爲是Win32事件隊列。 –