2011-10-31 26 views
1

在Win32中,您可以通過使用dwCreationFlags參數與CREATE_SUSPENDED創建處於掛起模式的線程。我正在尋找與pthreads類似的功能。請注意,我不想在運行它之後暫停該線程,然後通過使用條件變量暫停該線程,但實際上是在暫停模式下創建它,然後再啓動它。使用pthreads在掛起模式下創建線程

使用此方法的優點是,我可以在運行它之前爲該線程分配一些屬性。例如,在啓動之前將其綁定到某個核心,這比第一次啓動更有效,然後將其分配給核心,因爲它可能從一個核心移動到另一個核心。

如果不可能,我們至少可以在調用pthread_create時將線程綁定到核心上?

回答

5

如果你想一個線程的CPU從一開始就進行綁定,就可以使用的pthread_create形式與pthread_attr_t說法。 Linux支持一個特殊的屬性pthread_attr_setaffinity_np,它允許一個線程綁定到某個CPU集。不要將它與pthread_setaffinity_np混淆,這需要一個已經運行的線程。

行動計劃是這樣的:

// create generic attribute set 
pthread_attr_t attr; 
pthread_attr_init(&attr); 

// enhance with CPU set 
pthread_attr_setaffinity_np(&attr, ...cpuset-args); 

// create thread with right attributes including CPU set 
pthread_t thread; 
pthread_create(&thread, &attr, ...); 

// viola, thread runns on given CPU-set, cleanup 
pthread_attr_destroy(&attr); 
0

初始掛起狀態或核心綁定將由pthread_create的第二個參數中給出的屬性處理,其中的選項記錄在pthread_attr_init的聯機幫助頁中。我沒有在那裏找到相關的標誌,所以目前似乎不可能。您可以針對Linux pthreads實現提出錯誤。

+0

嗯,有趣。 – MetallicPriest

+0

[pthread_attr_setaffinity_np()](http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_attr_setaffinity_np.3.html)可能會有用。 –

+0

pthread_attr_setaffinity_np()只能在pthread_create後綁定。 – MetallicPriest

0

當前沒有標誌在pthread屬性上創建處於掛起狀態的線程。

很有可能您必須在創建後手動掛起它。

爲了實現懸浮/簡歷,你可以看看here

+0

至少,我們可以在pthread_create時將它綁定到一個核心上嗎?順便說一下,我討厭那種條件變量方法暫停,效率低下! – MetallicPriest

+0

你正在尋找這個[功能](http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_setaffinity_np.3.html) – ziu

相關問題