2013-11-20 38 views
0

我有一個基本的程序來測試在pthread_create:爲什麼pthread_create以隨機順序創建線程?

int main (int argc, char *argv[]) 
{ 
    pthread_t threads[NUM_THREADS]; 
    long t; 

    for(t=0; t<NUM_THREADS; t++){ 

     /* TODO assignment 3.2 a) */ 
     pthread_create(&threads[t], NULL, SomeFunction, t); 
//  pthread_join(threads[t], NULL); 

    } 

    printf("Completed. Exiting\n"); 
    pthread_exit(NULL); 
} 

每次我跑了它,它會在一個隨機的順序線程不考慮for循環。這是什麼原因?

回答

2

我假定你的意思是你看到SomeFunction的結果(或一些副作用)發生的不是嚴格按照t的升序排列。

根據定義,線程是異步執行的單元,其狀態(執行與否)是由OS決定的。操作系統可以自由安排線程,因爲它認爲合適。除了不存在和存在之外,您碰巧創建這些線程的順序並不是OS調度器的「輸入」。如果需要不同線程中的事情以特定順序發生,則必須使用信號量,互斥鎖等同步原語手動同步這些線程。

簡而言之,這只是「線程工作的方式」。我希望您看到的結果/副作用的順序是以這種方式創建的,相對於t而言是非確定性的。