如何找到信号量不锁定的原因

时间:2012-05-08 04:53:13

标签: linux ipc deadlock semaphore

我有一种奇怪的情况,即几个线程(实际上是5个线程)挂起。原因是它正在等待信号量,并且无法抓住它。 ipcs -p不会显示具有该信号量的任何任务。 ipcs -s -i显示计数为5。

那么,我怎么知道为什么这5个线程没有发生信号量锁?如何查看是否有任何线程持有此信号量。

(分析调用堆栈,我看不到任何具有信号量的任务。)

感谢帮助!

1 个答案:

答案 0 :(得分:1)

我会围绕信号量的使用编写一些调试代码(即在每个信号量之前和之后都指向那些指定使用哪个信号量和什么线程的信号量函数)。此外,我会仔细检查以确保您的代码没有任何死锁。这很容易实现,确保您以相同的顺序使用各种信号量来获得互斥锁,并使用相反的顺序来释放锁。

除此之外,没有代码,我可以给你很少的帮助。