发信号通知条件变量(pthreads)

Man*_*Row 5 c posix mutex pthreads condition-variable

假设某些条件变量"cond"与互斥变量"mutex"相关联.如果线程cond在调用后处于休眠状态pthread_cond_wait(&cond,&mutex),并且另一个已mutex锁定的线程已完成,则该线程在调用pthread_cond_signal(&cond)之前或之后调用pthread_mutex_unlock(&mutex)是否重要?它是否甚至需要解锁互斥锁pthread_cond_signal(&cond),因为睡眠线程无论如何都会获取互斥锁?

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

R..*_*R.. 4

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

调用 pthread_cond_signal 而不锁定互斥体

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

  • 充分的理由是避免优先级反转:http://groups.google.com/group/comp.programming.threads/msg/a3721a2fc9b21c64?hl=ky 链接自http://stackoverflow.com/questions/4544234/calling-pthread -cond-signal-without-locking-mutex/4544494#4544494 (2认同)