我编写了以下简单代码,它应该在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
答案 0 :(得分:2)
线程要么在libc中等待对stderr的锁定,要么它们都在竞争操作系统中的同一个锁。等待锁的线程不会使用cpu。虽然你有一个使用100%的线程,但我很惊讶。他们应该被卡住或多或少地等待锁定。
答案 1 :(得分:1)
我猜他们可能正在等待锁定才能打开,以便下一个线程被执行