一般来说,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);
Run Code Online (Sandbox Code Playgroud)
步骤是
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对,它是否可以被许多线程调用?