【发布时间】:2015-07-15 21:04:42
【问题描述】:
我试图更好地了解如何使用pthread_cond_wait() 以及它是如何工作的。
我只是想对我在这个网站上看到的答案进行一些澄清。
答案是本页最后的回复
understanding of pthread_cond_wait() and pthread_cond_signal()
我想知道使用三个线程会如何。想象一下线程 1 想告诉线程 2 和线程 3 唤醒
例如
pthread_mutex_t mutex;
pthread_cond_t condition;
线程 1:
pthread_mutex_lock(&mutex);
/*Initialize things*/
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&condition); //wake up thread 2 & 3
/*Do other things*/
线程 2:
pthread_mutex_lock(&mutex); //mutex lock
while(!condition){
pthread_cond_wait(&condition, &mutex); //wait for the condition
}
pthread_mutex_unlock(&mutex);
/*Do work*/
线程 3:
pthread_mutex_lock(&mutex); //mutex lock
while(!condition){
pthread_cond_wait(&condition, &mutex); //wait for the condition
}
pthread_mutex_unlock(&mutex);
/*Do work*/
我想知道这样的设置是否有效。假设线程 2 和 3 依赖于线程 1 需要处理的一些初始化选项。
【问题讨论】:
-
你可以让两个线程在相同的条件下等待,是的。当您调用
pthread_cond_signal()时,只有其中一个会被唤醒,但被唤醒的线程可能会再次发出信号以唤醒下一个等待的线程......或者您可以使用pthread_cond_broadcast()来唤醒所有等待条件的线程。
标签: c multithreading pthreads