一般而言,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 锁定的互斥锁。我的理解有什么问题吗?
此外,在我看来,pthread_cond_wait()
同一 cond-mutex 对只能由 1 个线程调用。但是有一种说法“pthread_cond_signal() 函数应至少解除阻塞在指定条件变量 cond 上阻塞的线程之一(如果任何线程在 cond 上阻塞)。” 那么,这意味着pthread_cond_wait()
可以由多个线程为同一个 cond-mutex 对调用吗?