2014-10-02 36 views
0

對於以下的代碼:關於調用pthread_cond_wait

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); 
} 

假定線程1和線程在LINE2,thread3等待和thread4被阻止在LINE1。當thread5執行LINE3時,哪些線程將首先運行? thread1或thread2?線程3或線程4?

回答

1

當線程5發出條件時,線程1或線程2或兩者都將被釋放等待,並且將等待互斥鎖可以被鎖定,直到線程5解鎖後纔會被鎖定。

當thread5然後解鎖互斥鎖時,其中一個等待鎖定互斥鎖的線程將能夠這樣做。我對POSIX的閱讀只會揭示等待鎖定的線程將繼續執行的順序是「低於定義的」,儘管更高優先級的線程可能會首先運行。事情如何安排主要取決於系統。

如果您需要線程以特定順序運行,那麼您需要自行安排。

相關問題