线程在while循环中间随机停止

时间:2012-11-12 06:57:09

标签: c++ multithreading qnx

我有一个非常有趣的程序。基本上我有三个主线程,都忙,问题线程基本上有一个看起来像这样的while循环:

while(variable which is always true) {
    get some data;
    process data;
    print message;
}
print end message;

现在打印消息大约前400轮打印但在此之后线程停止运行。我已经尝试将此线程作为高优先级。我试过减少其他线程的优先级。最奇怪的是,这在以前工作并且在调试另一个问题时(仅使用print语句完成),它开始间歇性地发生。现在它已成为永久性的,就像每次都发生的那样。

暂时解决它的事情(然后它似乎再次停止工作)是:

  1. 降低其他线程中的print语句级别。

  2. 降低其他线程的优先级。

  3. 在不同时间跑步。

  4. 作为免责声明,我使用的是名为QNX的实时操作系统,可能直接导致问题。我希望它不是这个,否则我们有一个很大的核心i7,没有能力使用线程。

    不幸的是,代码很长并且用于工作,所以我真的不应该发布它。我希望得到帮助,这将指出我自己解决问题的正确方向。有谁知道可能导致这些症状的问题?

2 个答案:

答案 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)

这听起来像是竞争条件 确保没有锁定的互斥锁未正确解锁的情况,因为这可能导致死锁。
不幸的是,调试线程问题非常复杂,所以你在这里几乎都是自己的。