2014-12-19 142 views
0

我正在編寫一個程序,該程序將創建兩個線程,其中一個線程必須具有高優先級,另一個是默認值。我正在使用pthread_create()創建線程,並希望從同一命令啓動線程優先級。我做這件事的方法是如下:將線程優先級設置爲高C

在pthread_create(&螺線lastThreadIndex],NULL,&溶液,(無效*)(& threadParam));

其中, 線程:是類型的pthread_t的陣列,其具有我的所有線程在 lastThreadIndex:是反 溶液:是我的功能 threadParam:是具有由溶液功能所需的所有變量的結構體。

我已經閱讀了很多文章,其中大部分都建議用優先級替換NULL;但是,我從來沒有找到關鍵詞或關鍵詞的確切方式。

請幫助...

感謝

回答

1

在POSIX,這第二個參數是並行線程屬性,NULL只是意味着使用默認值。

但是,您可以創建自己屬性並設置其屬性,包括擡高了優先級的東西,如:對POSIX線程

#include <pthread.h> 
#include <sched.h> 

int rc; 
pthread_attr_t attr; 
struct sched_param param; 

rc = pthread_attr_init (&attr); 
rc = pthread_attr_getschedparam (&attr, &param); 
(param.sched_priority)++; 
rc = pthread_attr_setschedparam (&attr, &param); 

rc = pthread_create (&threads[lastThreadIndex], &attr, 
    &solution, (void *)(&threadParam)); 

// Should really be checking rc for errors. 

詳細信息,包括調度,可以開始在this page找到。

+0

你能否提供一個很好的參考來學習如何做到這一點。我面臨的問題是我有一個程序處理3200維的矩陣。我將矩陣分解爲4個子矩陣,並將每個子矩陣發送到一個線程中進行操作。我在windows機器上執行的時間是6521微秒(與順序代碼執行時間6600毫秒幾乎相同);但是,當我在linux機器上運行相同的程序時,它運行在860微秒(linux機器上的順序代碼執行時間爲6300毫秒)。 – Anas 2014-12-19 02:24:04

+0

@Anas,如果你在windows上使用pthreads,它是_probably_ pthreads_win32。如果是這樣,那麼(我怎麼才能巧妙地這麼說?)......根據我的經驗,它比Linux內核更少優化:-)使用Windows本機線程可能會更好。 – paxdiablo 2014-12-19 02:27:16

+0

你的意思是在Windows上打開MP嗎?或者有另一種方式? – Anas 2014-12-19 02:36:51