我啓動3個pthread並在運行我的應用程序幾次後,我發現根據創建語句的順序沒有確切的線程創建順序。啓動另一個正在運行的線程
一旦某個線程啓動後,如何創建另一個線程?
我仍然想從同一個「級別」創建線程,而不是從線程內部創建所需的線程,我想先從頭開始。
我啓動3個pthread並在運行我的應用程序幾次後,我發現根據創建語句的順序沒有確切的線程創建順序。啓動另一個正在運行的線程
一旦某個線程啓動後,如何創建另一個線程?
我仍然想從同一個「級別」創建線程,而不是從線程內部創建所需的線程,我想先從頭開始。
也許你可以找到有趣的pthread信號並等待條件變量。 下面是一些例子和解釋。 https://computing.llnl.gov/tutorials/pthreads/#ConVarSignal
線程沒有「級別」或父/子關係。包括初始線程主線程在內的所有線程都是對等體。只要線程描述符有效且線程未分離,任何線程都可以在任何其他線程上調用pthread_join
。
如果確實需要執行排序,最簡單的工具是障礙(pthread_barrier_wait
)。另一方面,條件變量更強大,但更難使用,並且可能不需要這種情況。
如果你的平臺支持它,我相信semget(),semop(),semctl()應該處理這個。只需要讓主進程線程創建並等待一個信號量,並且一旦適合序列中下一個線程的生成,每個線程都會有semop()信號量。
參見:http://support.sas.com/documentation/onlinedoc/sasc/doc700/html/lr2/z2101576.htm
是否可以從線程函數調用調用pthread_create()?
pthread_create創建一個線程,並且正如您發現的那樣,它不會調用線程函數。基本上,您的新線程位於活動線程列表中,並且調度程序可以在它選擇時給它一個時間片。通常這是幾個毫秒,但可以更長。
獲取線程開始設置併發對象,然後等待主線程。一旦設置完成,你就知道第一個線程已經啓動,你可以開始第二個線程等等。 – forsvarir 2011-04-23 18:50:50
線程的內在本質不是順序確定的,你應該重新安排你的代碼,以便它不重要! – Kevin 2011-04-23 19:06:47