- 论坛徽章:
- 0
|
回apony :
1.请检查那几个停止线程的数据库异常处理;
2.vmstat 1检查httpd开启时异常;
3.互斥量、条件变量的使用可以贴上主要流程逻辑,让大家帮你一起分析
4.线程停止时,试一下gstack
那几个线程没有停止在访问数据库的地方,
httpd应该也是正常的吧,这个没有进一步检查,佐证是如果不做这个压力测试的话,运行几天也没问题,即使访问Web页面也没问题。而且httpd跟我的程序没有直接关系,仅仅是访问同一个数据库而已。我的程序往某些表里放记录,php页面处理这些数据然后显示结果给浏览者。
互斥量等的使用也是很普通的使用方式,没有使用任何特殊的特征。
主线程获得锁,往队列里放入任务信息节点,给一个条件变量信号A(是signal,不是broadcast),释放锁。当所有任务信息放入后,永久等待条件变量B的信号。
处理线程是,获得锁,在队列空的时候永久等待条件变量信号A。收到信号后看队列不空,就去拿节点,然后释放锁,处理后开始新一轮的循环。如果处理线程发现队列被处理空了之后,发一个条件变量信号B。
当然整个任务不是只用到了这么一个互斥量和条件变量;但是其他的互斥都是发生在处理具体任务信息的流程上,而加打印信息、gdb等的结果显示线程是停止在上述的主控流程处。
gstack没用过,不知道是什么,有空去看看。 |
|