2011-10-05 68 views
0

我有一个boost :: mutex在两个线程中使用。第一个线程不断锁定和解锁互斥锁。第二个线程仅在特定条件下使用互斥锁。当这种情况发生时,两个线程都会锁定在锁上。什么可能造成这种情况?这两个线程阻塞在调用boost :: mutex :: lock()

关于我的程序的一些随机事实:互斥量是两个线程之间共享的类的数据成员。在第二个线程中,我将一个指针传递给使用它的函数的互斥量,但在第一个线程中,我通过引用使用了互斥量。

+0

你可以发布代码指示线程如何使用互斥? – Tim

+0

只是一个想法。这些函数之间是否有递归调用或循环依赖关系?如果是的话,你将不得不使用递归互斥锁(如果这是你想要的),或者只是复习你的代码,因为它会创建经典的死锁。 –

+0

我发现在第一个线程的关键部分中,一个Win32函数被调用,应该只从第二个线程调用该线程,因为该线程创建了Win32窗口。我不确定在这种情况下我应该做什么礼节。答案与我提出的问题无关。我们是否投票结束? –

回答

1

您是否记得在发出信号后解锁主线程中的互斥锁?或者,你是否陷入僵局?

+0

是的,发生了死锁,但不是因为我使用的互斥锁,而是因为一个不同的函数导致两个线程阻塞我认为是Win32事件队列。 –