c - 向条件变量发出信号(pthreads)

标签 c pthreads posix mutex condition-variable

假设某个条件变量“cond”与互斥变量“mutex”相关联。如果一个线程在调用 pthread_cond_wait(&cond,&mutex) 后在 cond 上休眠,而另一个已锁定 mutex 的线程已完成,这有关系吗该线程是在调用 pthread_mutex_unlock(&mutex) 之前还是之后调用 pthread_cond_signal(&cond) ?如果它调用 pthread_cond_signal(&cond),它是否甚至需要解锁互斥量,因为休眠线程无论如何都会获取互斥量?

编辑:根据 https://computing.llnl.gov/tutorials/pthreads/#ConVarOverview , “在调用 pthread_cond_signal() 后未能解锁互斥量可能不允许匹配的 pthread_cond_wait() 例程完成(它将保持阻塞状态)。”我想那么,解锁,也许只有在之后,才是必需的。

最佳答案

在调用 pthread_cond_signal 后,您应该始终解锁互斥量。以下是一些值得阅读的好问题/答案:

Calling pthread_cond_signal without locking mutex

我现在不会想到它,但我很确定有一个很好的理由(就竞争条件而言)您不想在发出信号之前解锁互斥量。

关于c - 向条件变量发出信号(pthreads),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5175435/

相关文章:

c++ - 条件线程制作

makefile - Makefile 应该在 'make clean' 上删除自己吗?

python - 为什么我不能跳出这个 itertools 无限循环?

c - 它在不是 16 位的机器上有效吗

c - 将过剩绘制另存为 PNG/BMP/JPG

c - C中的函数重载

c - 为什么在 POSIX 中创建消息队列时出现错误 "Cannot Allocate Memory"?

c - 如何用C语言在客户端-服务器程序中建立双向链接?

c - pthreads : difference due to malloc and direct declaration

linux - C++11:Linux 上的 std::thread 是否依赖于 pthread 库?