这是一个创建于 3659 天前的主题,其中的信息可能已经有所发展或是发生改变。
一个简单的生产-消费模式的多线程程序:生产者线程将数据放入链表,通过信号量通知消费者线程取数据。现在从内部log看数据一直再放入,可是消费者线程貌似挂住,不再取数据了。线程是采用pthread库创建;信号量是采用sem_init/wait/post实现。
诡异的地方在于: 客户是用VirtualBox跑Debian7系统才出现这个问题。我们在实体机上以及自己的VirtualBox上怎么跑都无法重新这个问题,客户虚拟机里跑两分钟就重现了。
这该怎么破? 有什么工具可以定位一下么?谢谢。
第 1 条附言 · 2014-12-12 11:54:51 +08:00
查出来了,是另外一个锁的问题。
简单记录一下过程。其实可以直接用gdb调试。
(1)ps查出当前程序的pid,比如1234;
(2)直接gdb程序,比如程序是demo,则运行gdb demo 1234
(3)用bt命令查找当前堆栈,基本上就看出当前卡在什么位置,然后就是排查的事情了。