关于pthread_cond_wait

时间:2014-10-02 20:52:27

标签: 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); 
    pthread_cond_signal(&cond);  //LINE3 (thread5)
    pthread_mutex_unlock(&mutex); 
}

假设thread1和thread2在LINE2等待,thread3和thread4在LINE1被阻止。当thread5执行LINE3时,哪些线程将首先运行? thread1还是thread2? thread3或thread4?

1 个答案:

答案 0 :(得分:1)

当thread5发出信号时,thread1或thread2或两者都将从等待中释放,并等待直到互斥锁被锁定......直到thread5解锁后才会这样。

当thread5然后解锁互斥锁时,其中一个等待锁定互斥锁的线程就能够这样做。我对POSIX的阅读只揭示了等待锁定的线程将继续执行的顺序是“未定义”,尽管可能需要先运行更高优先级的线程。如何安排事情在很大程度上取决于系统。

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