CPU_SET(3) Library Functions Manual CPU_SET(3) CPU_SET, CPU_CLR, CPU_ISSET, CPU_ZERO, CPU_COUNT, CPU_AND, CPU_OR, CPU_XOR, CPU_EQUAL, CPU_ALLOC, CPU_ALLOC_SIZE, CPU_FREE, CPU_SET_S, CPU_CLR_S, CPU_ISSET_S, CPU_ZERO_S, CPU_COUNT_S, CPU_AND_S, CPU_OR_S, CPU_XOR_S, CPU_EQUAL_S - LIBRARY Standard C library (libc, -lc) #define _GNU_SOURCE /* feature_test_macros(7) */ #include void CPU_ZERO(cpu_set_t *set); void CPU_SET(int cpu, cpu_set_t *set); void CPU_CLR(int cpu, cpu_set_t *set); int CPU_ISSET(int cpu, cpu_set_t *set); int CPU_COUNT(cpu_set_t *set); void CPU_AND(cpu_set_t *destset, cpu_set_t *srcset1, cpu_set_t *srcset2); void CPU_OR(cpu_set_t *destset, cpu_set_t *srcset1, cpu_set_t *srcset2); void CPU_XOR(cpu_set_t *destset, cpu_set_t *srcset1, cpu_set_t *srcset2); int CPU_EQUAL(cpu_set_t *set1, cpu_set_t *set2); cpu_set_t *CPU_ALLOC(int num_cpus); void CPU_FREE(cpu_set_t *set); size_t CPU_ALLOC_SIZE(int num_cpus); void CPU_ZERO_S(size_t setsize, cpu_set_t *set); void CPU_SET_S(int cpu, size_t setsize, cpu_set_t *set); void CPU_CLR_S(int cpu, size_t setsize, cpu_set_t *set); int CPU_ISSET_S(int cpu, size_t setsize, cpu_set_t *set); int CPU_COUNT_S(size_t setsize, cpu_set_t *set); void CPU_AND_S(size_t setsize, cpu_set_t *destset, cpu_set_t *srcset1, cpu_set_t *srcset2); void CPU_OR_S(size_t setsize, cpu_set_t *destset, cpu_set_t *srcset1, cpu_set_t *srcset2); void CPU_XOR_S(size_t setsize, cpu_set_t *destset, cpu_set_t *srcset1, cpu_set_t *srcset2); int CPU_EQUAL_S(size_t setsize, cpu_set_t *set1, cpu_set_t *set2); cpu_set_t. sched_setaffinity(2) . cpu_set_t . << >>: , . set : CPU_ZERO() set, . CPU_SET() cpu set. CPU_CLR() cpu set. CPU_ISSET() , cpu set. CPU_COUNT() set. , cpu, , . cpu 0, cpu 1 . . - , , . CPU_SETSIZE ( 1024) 1 , , cpu_set_t. : CPU_AND() srcset1 srcset2 destset ( -). CPU_OR() srcset1 srcset2 destset ( -). CPU_XOR() XOR srcset1 srcset2 destset ( -). XOR , srcset1 srcset2, . CPU_EQUAL() , . (, , cpu_set_t), glibc . : CPU_ALLOC() , 0 num_cpus-1. CPU_ALLOC_SIZE() , 0 num_cpus-1. , setsize CPU_*_S(), . CPU_FREE() , CPU_ALLOC(). , <<_S>>, . , , setsize . CPU_ISSET() CPU_ISSET_S() , cpu set; 0. CPU_COUNT() CPU_COUNT_S() set. CPU_EQUAL() CPU_EQUAL_S() , ; 0. CPU_ALLOC() , NULL ( , malloc(3)). CPU_ALLOC_SIZE() , . . Linux. CPU_ZERO(), CPU_SET(), CPU_CLR() CPU_ISSET() glibc 2.3.3. CPU_COUNT() glibc 2.6. CPU_AND(), CPU_OR(), CPU_XOR(), CPU_EQUAL(), CPU_ALLOC(), CPU_ALLOC_SIZE(), CPU_FREE(), CPU_ZERO_S(), CPU_SET_S(), CPU_CLR_S(), CPU_ISSET_S(), CPU_AND_S(), CPU_OR_S(), CPU_XOR_S() CPU_EQUAL_S() glibc 2.7. memcpy(3). , , sizeof(unsigned long). . , , CPU_SETSIZE cpu_set_t ( , ), setsize CPU_*_S() -- . , -- , . , , . 32- glibc 2.8 CPU_ALLOC () , , CPU_ALLOC_SIZE() , . , . glibc 2.9. , . #define _GNU_SOURCE #include #include #include #include #include int main(int argc, char *argv[]) { cpu_set_t *cpusetp; size_t size, num_cpus; if (argc < 2) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(EXIT_FAILURE); } num_cpus = atoi(argv[1]); cpusetp = CPU_ALLOC(num_cpus); if (cpusetp == NULL) { perror("CPU_ALLOC"); exit(EXIT_FAILURE); } size = CPU_ALLOC_SIZE(num_cpus); CPU_ZERO_S(size, cpusetp); for (size_t cpu = 0; cpu < num_cpus; cpu += 2) CPU_SET_S(cpu, size, cpusetp); printf("CPU_COUNT() of set: %d\n", CPU_COUNT_S(size, cpusetp)); CPU_FREE(cpusetp); exit(EXIT_SUCCESS); } . sched_setaffinity(2), pthread_attr_setaffinity_np(3), pthread_setaffinity_np(3), cpuset(7) Azamat Hackimov , Dmitriy S. Seregin , Dmitry Bolkhovskikh , Katrin Kutepova , Yuri Kozlov ; GNU 3 , . . , , . Linux man-pages 6.06 31 2023 . CPU_SET(3)