确定正在运行调用线程的CPU



我是Pthread的新手。我写了一个例子来检查我的线程在哪个CPU上运行。我使用了sched_getcpu((来获取调用线程当前正在执行的CPU的编号。这是我的代码:

#include <pthread.h>
#include <stdio.h>
void* a(){
printf("1st child thread in CPU %dn",sched_getcpu());
return NULL;
}
void* b(){
printf("2nd child thread in CPU %dn",sched_getcpu());

return NULL;

}
void* c(){
printf("3rd child thread in CPU %dn",sched_getcpu());

return NULL;

}
void* d(){

printf("4th child thread in CPU %dn",sched_getcpu());

return NULL;

}
void* e(){
printf("5th child thread in CPU %dn",sched_getcpu());

return NULL;

}
int main(){
pthread_t t;
pthread_t t1;
pthread_t t2;
pthread_t t3;
pthread_t t4;
pthread_create(&t,NULL,a,NULL);
pthread_create(&t1,NULL,b,NULL);
pthread_create(&t2,NULL,c,NULL);
pthread_create(&t3,NULL,d,NULL);
pthread_create(&t4,NULL,e,NULL);

pthread_join(t,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
pthread_join(t3,NULL);
pthread_join(t4,NULL);

printf("main thread in CPU %dn",sched_getcpu());
return 0;
}

显然,这个程序的输出在每次运行时都会发生变化。但这里有一个例子:

输出:

1st child thread in CPU 2
3rd child thread in CPU 2
2nd child thread in CPU 0
4th child thread in CPU 3
5th child thread in CPU 1
main thread in CPU 3

CPU的id号从0更改为3。我想知道为什么输出在0到3之间,而我的计算机只有2个内核和4个线程。输出中CPU的id是否等于物理线程的id?谢谢

您的计算机有2个核心和4个";逻辑处理器";(CPU(。因为您有4个CPU,所以ID号从0到3。

这里的主要问题是术语——;CPU";(和"线程"(。你假设";CPU";定义为";核心";,但大多数人将其定义为";逻辑处理器";或";(硬件(线程";;使用超线程,每个核心有2个逻辑处理器,因此最终有4个CPU(来自2个核心(。

我为pthread初学者准备的两分钱:

添加:

#包括<时间表h>

根据:https://man7.org/linux/man-pages/man3/sched_getcpu.3.html

相关内容

  • 没有找到相关文章

最新更新