我在程序中使用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/

10-11 23:19
查看更多