Необходимо использовать sched_setaffinity(2)
.
, Например, для работы центральных процессоров 0 и 2 только:
#define _GNU_SOURCE
#include <sched.h>
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(0, &mask);
CPU_SET(2, &mask);
result = sched_setaffinity(0, sizeof(mask), &mask);
(0
для первого параметра означает текущий процесс, предоставьте PID, если это - некоторый другой процесс, Вы хотите управлять).
См. также sched_getcpu(3)
.
В коротком
unsigned long mask = 7; /* processors 0, 1, and 2 */
unsigned int len = sizeof(mask);
if (sched_setaffinity(0, len, &mask) < 0) {
perror("sched_setaffinity");
}
Взгляд в Привязка ЦП для получения дополнительной информации
Используйте sched_setaffinity на уровне процесса, или pthread_attr_setaffinity_np для отдельных потоков.