我有几个线程将数据传递给对方并稍微处理它们。一旦我在最后两个线程之间进行同步,程序就开始崩溃了。我没有多少线程经验,所以不是调试我只是评论了最后一个线程的全部内容,所以它只是在循环运行时,另一个线程保持不变,除了同步部分只是
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
然后我还评论了哪个使应用程序无故障地运行。
在程序的其余部分中,绝对不依赖于互斥锁或条件变量。如果我只评论pthread_cond_signal(& cond);它也有效。关于发生了什么的任何想法?
答案 0 :(得分:0)
嗯,那段代码没有任何意义。如果您没有更改受互斥锁保护的任何变量的值,那么发送条件变量的意义是什么?此外,无论是否握住互斥锁,您都可以发出信号,因此不需要锁定/解锁。 (如果您不了解条件变量的基本知识,请参阅Condition Variables。)
但崩溃的唯一可能方法是,如果cond
未正确初始化,cond
被破坏,或cond
被覆盖其内存的内容损坏。
答案 1 :(得分:0)
发生永远的崩溃的唯一方法是当您调用未定义的行为时。这可能发生在pthread_cond_signal
调用之前的程序中的任何位置,或者UB可能在调用本身中(通过传递未初始化的条件变量的地址)。没有更多信息,就没有办法知道。