最佳答案
一般来说,pthread_cond_wait()
和 pthread_cond_signal()
的名称如下:
//thread 1:
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
do_something()
pthread_mutex_unlock(&mutex);
//thread 2:
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
台阶是
pthread_cond_wait(&cond, &mutex);
被调用,它就会解锁互斥锁
线程2锁定互斥对象并调用 pthread_cond_signal()
,从而解锁互斥对象
在线程1中,调用 pthread_cond_wait()
并再次锁定互斥量
现在在线程2中,在调用 pthread_cond_signal()
之后,pthread_mutex_unlock(&mutex)
将要运行,在我看来它想要解锁一个互斥锁,这个互斥锁现在被线程1锁定了。我的理解有什么问题吗?
此外,在我看来,对于相同的 cond-mutex 对,pthread_cond_wait()
只能由1个线程调用。但是有一种说法“ pthread _ cond _ sign ()函数应该解除至少一个在指定条件变量 cond 上被阻塞的线程的阻塞(如果有任何线程在 cond 上被阻塞)。”因此,这意味着 pthread_cond_wait()
可以被多个线程为同一对 cond-mutex 调用?