【发布时间】:2012-10-05 09:02:59
【问题描述】:
我的互斥锁似乎已解锁。 我的代码看起来像这样(不是实际代码)(使用 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 个线程工作
【问题讨论】:
标签: pthreads signals mutex race-condition