gpt4 book ai didi

c++ - 确定调用线程正在哪个 CPU 上运行?

转载 作者:行者123 更新时间:2023-12-03 12:48:49 27 4
gpt4 key购买 nike

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

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

void* a(){

printf("1st child thread in CPU %d\n",sched_getcpu());

return NULL;
}

void* b(){

printf("2nd child thread in CPU %d\n",sched_getcpu());

return NULL;

}

void* c(){

printf("3rd child thread in CPU %d\n",sched_getcpu());

return NULL;

}
void* d(){


printf("4th child thread in CPU %d\n",sched_getcpu());

return NULL;

}
void* e(){

printf("5th child thread in CPU %d\n",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 %d\n",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 个核心)。

关于c++ - 确定调用线程正在哪个 CPU 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65057620/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com