2011-08-02 51 views
4

可能重複:
Bind threads to processors修復線程對某些核心執行

在Linux中,是能夠固定線程對某些核心執行。如果可能的話,我也想知道是否有可能在某個內核上獨佔地執行一個線程,即不允許在該線程執行時在該內核上執行任何其他線程。

+0

可能值得注意的是,調度程序的工作是以高效的方式將線程分配給cpus。你有什麼理由需要再次猜測它嗎? –

回答

3

這就是pthread_setaffinity_np(3)所做的。

pthread_setaffinity_np()函數設置的 線程的線程通過cpuset指向的CPU集中的CPU親和力掩碼。如果調用 成功,並且該線程當前未在cpuset中的某個CPU 上運行,則會將其遷移到其中一個CPU。

舉個例子:

cpu_set_t set; 
CPU_ZERO(&set); 
CPU_SET(3, &set); /* Run only on the third CPU. */ 

pthread_setaffinity_np(thr, CPU_SETSIZE, &set); 


您還可以sched_setaffinity(2)gettid該手冊中提到,做到這一點:

如果您正在使用POSIX線程API,則使用 pthread_setaffinity_np(3)而不是sched_setaffinity()