2016-09-04 101 views
1
void main() 
{ 
    ..... 
    pthread_mutex_init(&lock) 
    pthread_create(fun,...) 
    pthread_create(fun,...) 
    pthread_create(fun,...) 
} 

void fun() 
{ 
    pthread_mutex_lock(&lock) 
    ........... 
    pthread_mutex_unlock(&lock) 
} 

在上面的代碼中,我創建了3個線程調用相同的函數fun。我可以告訴你,有趣的執行需要比創建線程更長的時間。所以最初有3個線程。但第一個線程在鎖定後已經在執行。現在第二和第三個線程正在等待。我的問題是一旦鎖定被釋放,哪個線程將被安排。它是第二個線程,然後是第三個或取決於調度程序。調度程序是否爲等待的線程維護任何類型的隊列並以FIFO方式進行調度?在第一個線程退出後哪個線程被調度?

回答

0

不,它不像FIFO。隨機一個線程將被喚醒。

+0

謝謝。在第一個線程退出後,是否立即調度第二個線程? – Harsha

+0

你必須自己實現一個公平的互斥鎖。它可以通過使用標準互斥來完成。另請參閱:http://stackoverflow.com/questions/5385777/implementing-a-fifo-mutex-in-pthreads – redneb

相關問題