假设某个条件变量“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 https://computing.llnl.gov/tutorials/pthreads/#ConVarOverview,“调用 pthread_cond_signal() 后未能解锁互斥锁可能不允许匹配的 pthread_cond_wait() 例程完成(它将保持阻塞状态)。”我想那时需要解锁,也许只有在解锁之后才需要。
您应该始终在调用后解锁互斥体pthread_cond_signal
。以下是一些值得阅读的好问题/答案:
调用 pthread_cond_signal 而不锁定互斥锁 https://stackoverflow.com/questions/4544234/calling-pthread-cond-signal-without-locking-mutex
我现在不会想到这一点,但我很确定有一个很好的理由(就竞争条件而言)您不想在发出信号之前解锁互斥体。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)