У линукса есть несколько механизмов ограничить процесс в доступных процессорных ядрах. Как минимум, cgroup и taskset. Если процессу важно знать, сколько у него ядер (чтобы сконфигурировать thread pool или ещё зачем-нибудь), то наивный способ -- прочитать /proc/cpuinfo. Он неправильный. Менее наивный -- позвать sysconf(_SC_NPROCESSORS_ONLN). Он тоже неправильный. Правильный -- вот:
long num_processor_configured = sysconf (_SC_NPROCESSORS_CONF);
/* list the number of processors configured */
long num_processor_available;
cpu_set_t mask;
if (sched_getaffinity(0, sizeof(cpu_set_t), &mask) == 0)
{ num_processor_available = CPU_COUNT(&mask); }
else { num_processor_available = sysconf(_SC_NPROCESSORS_ONLN); }
---
Оригинал
вот у Бориса Тоботраса
</code></pre>