2013-11-15 76 views
0

在不同的邏輯CPU執行我發現,當我使用的是這樣的:如何使不同的線程使用並行線程

pthread_t thread_1, thread_2; 
pthread_create (&thread_1, NULL, (void *) function_1, NULL); 
pthread_create (&thread_2, NULL, (void *) function_2, NULL); 

的兩個thread_1和thread_2在同一個邏輯CPU中執行。

如何使在不同的邏輯CPU兩者的執行?

謝謝。

+0

他們都準備好,並在即使另一個核心是免費的相同內核上運行? –

+0

@馬丁詹姆斯是的。當其他內核空閒時,它們都運行在同一個內核中。我不知道。 – user2967915

回答

0

pthread_setaffinity_np(3)讓你的線程的CPU關聯掩碼設置爲CPU集。

實施例:

int s, j; 
cpu_set_t cpuset; 
pthread_t thread; 

thread = pthread_self(); 

/* Set affinity mask to include CPUs 0 to 7 */ 

CPU_ZERO(&cpuset); for (j = 0; j < 8; j++) 
    CPU_SET(j, &cpuset); 

s = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset); if (s != 0) 
    handle_error_en(s, "pthread_setaffinity_np"); 

pthread_getaffinity_np返回一個線程的CPU親和力掩碼。

注:這個函數是不可移植。

+0

我的操作系統是windows NT,編譯器是gcc-mingw32。能否成功編譯'pthread_getaffinity_np'? – user2967915

+0

@ user2967915我想不是。在Windows中,你有'SetThreadAffinityMask'和'SetProcessAffinityMask'(http://en.wikipedia.org/wiki/Processor_affinity#Specific_operating_systems) – HAL

0
int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, 
           const cpu_set_t *cpuset); 
    int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, 
           cpu_set_t *cpuset); 

我覺得這些功能可以幫助你。閱讀本文件: enter link description here

+0

我的操作系統是Windows NT和編譯器是gcc-的mingw32。 pthread_getaffinity_np可以編譯成功嗎? – user2967915

+0

@ user2967915我認爲你不能成功。只有在Linux系統中才能使用這些函數,而不是在gcc中。但你可以試試,祝你好運。 – BlackMamba