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的阅读只揭示了等待锁定的线程的顺序是“未定义的”,尽管更高优先级的线程可能会首先运行。计划的方式在很大程度上取决于系统

如果您需要线程以特定顺序运行,那么您需要自行安排