pthread_cond_signal会导致崩溃吗?

时间:2011-10-26 22:29:07

标签: c pthreads

我有几个线程将数据传递给对方并稍微处理它们。一旦我在最后两个线程之间进行同步,程序就开始崩溃了。我没有多少线程经验,所以不是调试我只是评论了最后一个线程的全部内容,所以它只是在循环运行时,另一个线程保持不变,除了同步部分只是

pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);

然后我还评论了哪个使应用程序无故障地运行。

在程序的其余部分中,绝对不依赖于互斥锁或条件变量。如果我只评论pthread_cond_signal(& cond);它也有效。关于发生了什么的任何想法?

2 个答案:

答案 0 :(得分:0)

嗯,那段代码没有任何意义。如果您没有更改受互斥锁保护的任何变量的值,那么发送条件变量的意义是什么?此外,无论是否握住互斥锁,您都可以发出信号,因此不需要锁定/解锁。 (如果您不了解条件变量的基本知识,请参阅Condition Variables。)

但崩溃的唯一可能方法是,如果cond未正确初始化,cond被破坏,或cond被覆盖其内存的内容损坏。

答案 1 :(得分:0)

发生永远的崩溃的唯一方法是当您调用未定义的行为时。这可能发生在pthread_cond_signal调用之前的程序中的任何位置,或者UB可能在调用本身中(通过传递未初始化的条件变量的地址)。没有更多信息,就没有办法知道。