我试图找出使用C语言中的线程的CPU核心数。有人告诉我尝试一次执行40个线程,让每个线程休眠一秒钟,看看有多少同时执行。我真的很喜欢他的方法,问题是在执行我的代码后,程序正在休眠1秒钟,之后所有线程都立刻被激活(不包括睡眠)。 有人可以帮帮我吗?
void func(void* arg)
{
int n=(int*)arg;
sleep(1);
printf("Exec nr:%d\n",n);
}
int main(void) {
int i;
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "Current local time and date: %s", asctime (timeinfo) );
for(i=0;i<N;i++)
{
pthread_create(&th[i],NULL,func,(int*)i);
}
for(i=0;i<N;i++)
{
pthread_join(th[i],NULL);
}
time_t rawtime2;
struct tm* timeinfo2;
time ( &rawtime2 );
timeinfo2 = localtime ( &rawtime2 );
printf ( "Current local time and date: %s", asctime (timeinfo2) );
return 0;
}
答案 0 :(得分:0)
您将无法以这种方式发现CPU数量,因为调度程序可能会选择在同一核心上运行所有线程,而将其他核心保留为(更重要的)内容。 因此,您应该依赖操作系统提供的某些功能。 例如,在Linux上,文件/ proc / cpuinfo提供有关CPU的信息。任何用户级程序都可以打开和解析此文件。其他操作系统提供不同的机制。