2012-10-03 261 views
-1

我是新的多線程,並且正在執行「unix環境下的高級編程」。我無法獲得線程執行的順序。我有以下代碼。執行線程的順序

int err1 = pthread_create(&first, NULL, disp, a); 
int err2 = pthread_create(&second, NULL, disp, b); 
int err3 = pthread_create(&third, NULL, disp, c); 

但是與第三個tid有關的線程先執行,然後是第二個,最後是第一個。不知道這是行爲還是出了問題。

Thx! 拉胡爾。

+2

線程的主要點是並行運行,這意味着它們之間沒有順序關係。如果你想在*少數地方訂購,你通常使用同步來做到這一點。如果你希望進程在一般情況下是連續的(例如,'second'完全不能運行,直到第一個'完成),只需在同一個線程中運行它們即可。 –

回答

2

創建代碼後,無法保證執行代碼的順序。
只有在線程2和線程2將在線程1後創建後才能創建線程3.
只有在線程1中執行某些代碼之後,才能預測或假定線程2將被產生。如果你想達到這樣的東西,你需要提供你的一些Thread synchronization

3

這不是確定性的。線程並行運行,所以它將取決於你有多少處理器和超線程。如果您希望按給定順序排列它們,則需要使用同步點。一旦開始,所有線程都以自己的速度獨立運行。

0

你的程序運行在一個線程中,並創建另外三個。所有你可以保證的是,其他三個線程的創建順序,它們將在某個階段被執行。操作系統可以停止你的主線程,併爲你創建新線程,這些線程可以在創建完成後粘貼到一些線程堆棧中,以便稍後在主程序完成創建時看到它們。關鍵是,你真的不知道。

如果您需要這三個線程按順序執行並在下一個線程啓動之前完成,您基本上不需要首先使用線程。