gpt4 book ai didi

c++ - 相同的线程 ID

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:43 24 4
gpt4 key购买 nike

我编写了一段代码来执行一些多线程操作,以便对我的 dd 的写入/读取速度进行基准测试。

一切都在正常编译和运行,但我注意到线程 ID 是相同的。

所以我创建了一个条件(请参阅代码注释),这令人惊讶地表明我创建的每个线程都具有相同的 ID。

int main(int argc, char *argv[]) {
//long filesize = 10000000;
int nb_threads = atoi(argv[2]);
pthread_t tid[4];
int ok;
double latency;
double bandwith;
int err;
int i = 0;
srand(time(NULL));
while(i < nb_threads){
pthread_create(&(tid[i]),NULL,launch_dd_bm,(void *) argv);
pthread_join(tid[i], NULL);
/* if(!pthread_equal(tid[i],tid[i-1])){
printf("Thread ID: %u",tid[i]);
i++;
}
*/
i++;
}
return EXIT_SUCCESS;
}

void *launch_dd_bm(void *arg);

我知道我不是在测试线程是否已成功创建,但它们是。我只是删除了上面代码中的条件,这样您就可以真正看到发生了什么。

最佳答案

您在创建线程后立即调用 pthread_join(),所以发生的事情是
主线程的执行暂停并等待创建的线程完成其
执行。当第一个线程结束时,它的 Id 不再被使用,因此是相同的 Id
之后创建的线程“可以获取”。这就是为什么所有
您的线程具有相同的 ID。
为避免此问题,您应该在 while 循环之外调用 pthread_join()。

关于c++ - 相同的线程 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962221/

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