3

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

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

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

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

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

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

  3. 在不同的时间运行。

作为免责声明,我正在使用一个名为 QNX 的实时操作系统,这可能会直接导致问题。我希望不是这样,否则我们有一个大核心 i7 并且无法使用线程。

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

4

2 回答 2

2

This very much sounds like a race condition.
Make sure, that there are no circumstances where a locked mutex is not properly unlocked, because that could lead to a deadlock.
Unfortunately debugging threading issues is very complex, so you're pretty much on your own here.

于 2012-11-13T05:51:44.947 回答
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

如果所有线程正在读取相同的数据,则使用锁。

pthread_mutex_lock( &m );
. . .
while (!arbitrary_condition) {
    pthread_cond_wait( &cv, &m );
    }
. . .
pthread_mutex_unlock( &m );
于 2012-11-12T11:21:19.333 回答