我有一个非常有趣的程序。基本上我有三个主线程,都忙,问题线程基本上有一个看起来像这样的while循环:
while(variable which is always true) {
get some data;
process data;
print message;
}
print end message;
现在打印消息大约前400轮打印但在此之后线程停止运行。我已经尝试将此线程作为高优先级。我试过减少其他线程的优先级。最奇怪的是,这在以前工作并且在调试另一个问题时(仅使用print语句完成),它开始间歇性地发生。现在它已成为永久性的,就像每次都发生的那样。
暂时解决它的事情(然后它似乎再次停止工作)是:
降低其他线程中的print语句级别。
降低其他线程的优先级。
在不同时间跑步。
作为免责声明,我使用的是名为QNX的实时操作系统,可能直接导致问题。我希望它不是这个,否则我们有一个很大的核心i7,没有能力使用线程。
不幸的是,代码很长并且用于工作,所以我真的不应该发布它。我希望得到帮助,这将指出我自己解决问题的正确方向。有谁知道可能导致这些症状的问题?
答案 0 :(得分:1)
线程编程:同步 - http://www.cs.cf.ac.uk/Dave/C/node31.html
阅读本文,向下滚动至同步 - http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/sys_arch/kernel.html
http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/sys_arch/kernel.html#SCHEDULING
如果所有线程都读取相同的数据,则使用lock。
pthread_mutex_lock( &m );
. . .
while (!arbitrary_condition) {
pthread_cond_wait( &cv, &m );
}
. . .
pthread_mutex_unlock( &m );
答案 1 :(得分:1)
这听起来像是竞争条件
确保没有锁定的互斥锁未正确解锁的情况,因为这可能导致死锁。
不幸的是,调试线程问题非常复杂,所以你在这里几乎都是自己的。