求教一个关于信号的问题
我的程序有十个工作线程,近期出现一个问题,十个线程会越跑越少,最后只剩下一个线程在工作,其它九个死掉了,首先以前程序在solaris下是很好的,最近移植到suse9上才出现这个问题.分析定位了一月有余,总算可以说找到问题所在:有一个函数中会使用select(0,0,0,0,&timeout)的方法实现睡眠的功能,每个线程在工作的时候都会比较频繁的睡眠一秒,有时候一些线程睡过去就再也不起来了,也就是说吊死在select里了.今天又发现gdb调试时用handle SIG32 nostop nopass阻止SIG32这个信号后程序跑得很好,没有线程睡死.
查了一下好像select在与某些与信号有关的情况下会吊死又不大确定.关键是如何在程序正常运行而不是调试的时候阻止SIG32这个信号,试了signal(SIG32,SIG_IGN)似乎不行,我想象像这么频繁的信号,而我的程序根本没用到,是否应该编译时就有选项把它关掉.是不是我的make文件有问题?
求教.谢谢!
本文由北冥有鱼 发布于Linuxsky 论坛,网址:http://bbs.linuxsky.org/thread-5259-1-1.html
搜索更多相关主题的帖子:
信号 线程 select 求教