多线程导致更多的CPU使用率

时间:2011-11-24 05:26:17

标签: c linux

对于下面的代码,我的cpu使用率为97%。我在Ubuntu上运行c代码。

#include <stdio.h>
#include<pthread.h>
void *s_thread(void *x)
{
        printf("I am in first thread\n");
} 
void *f_thread(void *x)    
{
        printf("I am in second thread\n");
}

int main()
{
        printf("I am in main\n");
        pthread_t fth;
        int ret;
        ret = pthread_create( &fth,NULL,f_thread,NULL);
        ret = pthread_create( &sth,NULL,s_thread,NULL); 
        while(1);
        return 0;
}        

这个简单的代码比只运行一个线程给我更多的CPU使用率。

3 个答案:

答案 0 :(得分:6)

int main()
{
    printf("I am in main\n");

    pthread_t fth,sth;
    int ret;

    ret = pthread_create( &fth,NULL,f_thread,NULL);
    ret = pthread_create( &sth,NULL,s_thread,NULL); 

    pthread_join(&fth,NULL);
    pthread_join(&sth,NULL);

    return 0;
}

while(1)使用更多的CPU周期,因此请使用pthread_join并加入该进程,以便main线程等待子线程完成。

答案 1 :(得分:4)

在linux中有3个主题:

  • 1 - main()正在执行的主线程
  • 2 - f_thread
  • 3 - s_thread

主线程等待while(1)循环,这导致大量资源使用。 您不应该使用while(1),而是使用pthread_join(http://www.manpagez.com/man/3/pthread_join/)。

使用pthread_join,您的主线程将休眠,直到完成其他两个线程。因此不会有不必要的资源使用。

答案 2 :(得分:1)

将sleep命令放入循环中。例如,以下“sleep”命令会休眠一秒钟:

while(1) {
  sleep(1);
}

还有其他命令可以在更短的时间内休眠,例如unistd.h提供的“usleep”,它会睡眠一定的微秒数:

while(1) {
  usleep(1000);
}