//smp.c
#define _GNU_SOURCE
#include
#include
#include //get_nprocs()
#include
#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
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
{
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%