如何使用pthread使不同的线程在不同的逻辑CPU中执行

时间:2013-11-15 08:13:08

标签: multithreading pthreads

我发现当我使用这样的东西时:

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中执行?

感谢。

2 个答案:

答案 0 :(得分: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关联掩码。

注意:此功能不可移植。

答案 1 :(得分: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