//smp.c #define _GNU_SOURCE #include <sched.h> #include <stdio.h> #include <sys/sysinfo.h> //get_nprocs() #include <pthread.h> #define MAX_VALUE 1000000 inline int set_cpu(int i) { cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(i,&mask); if(-1 == sched_setaffinity(0,sizeof(cpu_set_t),&mask)) { return -1; } return 0; } void* pth_add(void* x) { int cpuid = (int)x; if(-1 == set_cpu(cpuid)) { return NULL; } while(1) { // printf("on CPU %d \n",cpuid); } return x; } int main() { int N = get_nprocs(); int cpuid; int err; void * pRslt=NULL; pthread_t pthR_t[N]; for(cpuid=0;cpuid<N;cpuid++) if((err=pthread_create(&pthR_t[cpuid],NULL,pth_add,(void*)cpuid))!=0) { printf("Create Thread %d Failed . exit !\n",cpuid); return -1; } for(cpuid=0;cpuid<N;cpuid++) { if((err=pthread_join(pthR_t[cpuid],&pRslt))!=0) { printf("Can not join Thread .exit"); return -1; } else { printf("Thread %d exit!\n",(int)pRslt); } } return 0; }
编译: gcc -g smp.c -o smp -lpthread
测试:top 然后键入 1 然后再 键入 H,不出意外,每个cpu的核负载都是100%