我在程序中使用pthread_cond_wait(&cond_t, &mutex);
,并且想知道为什么此函数需要互斥变量作为第二个参数。pthread_cond_wait()
是否在开始时(执行pthread_cond_wait()
的开始时)解锁互斥锁,然后在完成时(就在离开pthread_cond_wait()
之前)将其锁定?
最佳答案
当第一个线程调用 pthread_cond_wait(&cond_t, &mutex);
时,它将释放互斥锁,并等待直到信号cond_t
表示已完成并且 mutex
可用为止。
因此,当在另一个线程中调用 pthread_cond_signal
时,它不会“唤醒”仍在等待的线程。必须首先将mutex
解锁,然后才有可能第一个线程获得锁定,这意味着“成功返回 pthread_cond_wait
互斥锁后,该线程将被锁定,并应归调用线程所有。”
关于c - 是否执行pthread_cond_wait(&cond_t,&mutex);解锁然后锁定互斥锁?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14924469/