所有线程都在执行

时间:2014-10-08 14:59:57

标签: multithreading cpu sleep

我试图找出使用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;
}

1 个答案:

答案 0 :(得分:0)

您将无法以这种方式发现CPU数量,因为调度程序可能会选择在同一核心上运行所有线程,而将其他核心保留为(更重要的)内容。 因此,您应该依赖操作系统提供的某些功能。 例如,在Linux上,文件/ proc / cpuinfo提供有关CPU的信息。任何用户级程序都可以打开和解析此文件。其他操作系统提供不同的机制。