以下代码:
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?
答案 0 :(得分:1)
当thread5发出信号时,thread1或thread2或两者都将从等待中释放,并等待直到互斥锁被锁定......直到thread5解锁后才会这样。
当thread5然后解锁互斥锁时,其中一个等待锁定互斥锁的线程就能够这样做。我对POSIX的阅读只揭示了等待锁定的线程将继续执行的顺序是“未定义”,尽管可能需要先运行更高优先级的线程。如何安排事情在很大程度上取决于系统。
如果您需要线程以特定顺序运行,那么您需要自己安排。