我的互斥锁似乎已解锁。我的代码看起来像这样(不是实际代码)(使用 pthread):
thread
{
int id=...;
//locked aditional mutex _m2
mutex_lock(&_m);
varx=valuex;//irelevant
print("th%d signaling listener",id);
cond_signal(&_c);
print("th%d signaled listener",id);
mutex_unlock(&_m);
//unlocked additional mutex _m2
}
listener
{
tc=0
mutex_lock(&_m);
while(tc<threadcount)
{
cond_wait(&_c,&_m);
print("working");
tc++
work;
}
mutex_unlock(&_m);
}
正常(预测)输出:
th0 signaling listener;
working;
th0 signaled listener;
th1 signaling listener;
working;
th1 signaled listener;
我的输出:
0 signaling listener;
working;
0 signaled listener;
1 signaling listener;
1 signaled listener;
..所以线程跳过(侦听器不执行也不锁定_m)打印输出
我已经用 helgrind (full) 对其进行了分析,我没有错误,但我的应用程序在侦听器处停止,因为根据他的说法,他正在等待所有人完成。
注意:监听器是可加入的。额外的互斥锁 _m2 没有帮助。线程分离。我有大约 800 个分离的线程来避免堆栈问题,最多同时使用 50 个使用信号量来限制线程数。代码适用于 3-4 个线程