#define _GNU_SOURCE #include #include #include #include #include void* DoWork(void* args) { printf("ID: %lu, CPU: %d\n", pthread_self(), sched_getcpu()); return 0; } int main() { int numberOfProcessors = sysconf(_SC_NPROCESSORS_ONLN); printf("Number of processors: %d\n", numberOfProcessors); pthread_t threads[numberOfProcessors]; pthread_attr_t attr; cpu_set_t cpus; pthread_attr_init(&attr); for (int i = 0; i < numberOfProcessors; i++) { CPU_ZERO(&cpus); CPU_SET(i, &cpus); pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpus); pthread_create(&threads[i], &attr, DoWork, NULL); } for (int i = 0; i < numberOfProcessors; i++) { pthread_join(threads[i], NULL); } return 0; }