为什么这四个并行线程不能在cpu上同等加载

时间:2013-12-12 13:03:34

标签: c linux pthreads

我编写了以下简单代码,它应该在CPU内核上同样加载4个线程。但是htop结果显示我有一个占用100%CPU的线程和三个占用25%CPU的线程。所以我怀疑调用者线程可能在CPU上有更多负载而我感到困惑。任何人都可以告诉我原因吗?

#include <pthread.h>
#include <stdio.h>

void* print_ws( void* unused )
{
    while(1)
        fputc('W',stderr);
    return NULL;
}//print_xs

void* print_zs( void* unused )
{
    while(1)
        fputc('Z',stderr);
    return NULL;
}//print_xs

void* print_xs( void* unused )
{
    while(1)
        fputc('X',stderr);
    return NULL;
}//print_xs

void* print_os( void* unused )
{
    while(1)    
        fputc('O',stderr);
    return NULL;
}

int main()
{
    pthread_t t1, t2, t3;
    // create a new thread. the new thread will run the print_xs
    pthread_create(&t1, NULL, &print_zs, NULL);
    pthread_create(&t2, NULL, &print_xs, NULL);
    pthread_create(&t3, NULL, &print_ws, NULL);
    print_os(NULL);
return 0;
}//main

2 个答案:

答案 0 :(得分:2)

线程要么在libc中等待对stderr的锁定,要么它们都在竞争操作系统中的同一个锁。等待锁的线程不会使用cpu。虽然你有一个使用100%的线程,但我很惊讶。他们应该被卡住或多或少地等待锁定。

答案 1 :(得分:1)

我猜他们可能正在等待锁定才能打开,以便下一个线程被执行