两个线程都在调用 boost::mutex::lock() 时阻塞
Posted
技术标签:
【中文标题】两个线程都在调用 boost::mutex::lock() 时阻塞【英文标题】:Both threads blocking on call to boost::mutex::lock() 【发布时间】:2011-10-05 20:56:30 【问题描述】:我有一个在两个线程中使用的 boost::mutex。第一个线程不断锁定和解锁互斥锁。第二个线程仅在特定条件下使用互斥锁。当这种情况发生时,两个线程都阻塞在锁上。这可能是什么原因造成的?
关于我的程序的一些随机事实:互斥锁是两个线程之间共享的类的数据成员。在第二个线程中,我将指向互斥锁的指针传递给使用它的函数,但在第一个线程中,我通过引用使用互斥锁。
【问题讨论】:
你能贴出代码说明线程如何使用互斥锁吗? 只有一个想法。这些函数之间是否有任何递归调用或循环依赖关系?如果是,您将不得不使用递归互斥锁(如果这是您的意图)或仅查看您的代码,因为它会创建经典的死锁。 我发现在第一个线程的关键部分调用了一个 Win32 函数,该函数只能从第二个线程调用,因为该线程创建了 Win32 窗口。我不确定在这种情况下我应该怎么做。答案与我提出的问题无关。我们投票关闭吗? 【参考方案1】:您是否记得在发出条件信号后在主线程中解锁互斥锁?或者,您是否陷入僵局?
【讨论】:
是的,发生了死锁,但不是因为我使用的互斥锁,而是因为不同的函数导致两个线程阻塞在我认为是 Win32 事件队列的地方。以上是关于两个线程都在调用 boost::mutex::lock() 时阻塞的主要内容,如果未能解决你的问题,请参考以下文章