在Linux中使用pthread中的可用物理CPU核心

时间:2011-10-27 05:30:07

标签: c pthreads cpu-usage

我正在使用Linux Centos。

我使用pthread编写c并使用 pthread_set_affinity 。我希望看到每个线程都在独特的处理器中运行。喜欢---

thread1 in proccessor 0
thread2 in proccessor 1
.
.
.
threadn in processor n

目前当我使用这个set_affinity时它会运行,但是当我看到系统监视器时,我发现八核的CPU利用率没有分配。

CODE就是这样 ::

        if(for thread 1 )
        { 
        pthread_attr_init(&pta);
        CPU_SET(0,&cpuset);
        pthread_setaffinity_np(thread1, sizeof(cpu_set_t), &cpuset);
        pthread_create(&thread1,&pta,&sendimsg,(void*)&message);
        pthread_join(thread1,NULL);
        printf("User for Thread One : %d\n",numb.fir);
        pthread_attr_destroy(&pta);
        CPU_ZERO(&cpuset);
        }  

            else if(for thread 2)
            {
            pthread_attr_init(&pra);
            CPU_SET(1,&cpuset1);
            pthread_setaffinity_np(thread2, sizeof(cpu_set_t), &cpuset);
            pthread_create(&thread2,&pra,&sendimsg,(void*)&message);
            pthread_join(thread2,NULL);
            printf("User for Thread Two : %d\n",numb.sec);
            pthread_attr_destroy(&pra);
            CPU_ZERO(&cpuset1);
            }  

            for eight thread that way. 

注意:线程分配如20 20 20 20 ... 20

百分比就是这样

10%1%0%2%0%1%0%0%1%

我有八个核心PC,试图在8核心中运行8个线程。有一种方法可以在这个pthread和pthread_set_affinity中完全利用8个核心。

1 个答案:

答案 0 :(得分:0)

您可能没有足够的工作来完全使用线程。您不需要设置亲和力来执行此操作,只需生成8个实际上100%使用单个线程的线程。