Pthreads 关于pthread_cond_wait
对于以下代码:Pthreads 关于pthread_cond_wait,pthreads,Pthreads,对于以下代码: f1() { pthread_mutex_lock(&mutex); //LINE1 (thread3 and thread4) pthread_cond_wait(&cond, &mutex); //LINE2 (thread1 and thread2) pthread_mutex_unlock(&mutex); } f2() { pthread_mutex_lock(&mutex); p
f1()
{
pthread_mutex_lock(&mutex); //LINE1 (thread3 and thread4)
pthread_cond_wait(&cond, &mutex); //LINE2 (thread1 and thread2)
pthread_mutex_unlock(&mutex);
}
f2()
{
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond); //LINE3 (thread5)
pthread_mutex_unlock(&mutex);
}
假设thread1和thread2在第2行等待,thread3和thread4在第1行被阻塞。当thread5执行第3行时,哪些线程将首先运行?线程1还是线程2?thread3或thread4?当thread5发出条件信号时,thread1或thread2或两者都将从等待中释放,并将等待直到可以锁定互斥锁。。。直到thread5解除锁定后才会出现 当thread5然后解锁互斥锁时,等待锁定互斥锁的线程之一将能够这样做。我对POSIX的阅读只揭示了等待锁定的线程的顺序是“未定义的”,尽管更高优先级的线程可能会首先运行。计划的方式在很大程度上取决于系统 如果您需要线程以特定顺序运行,那么您需要自行安排