gpt4 book ai didi

c - 多个线程如何拥有相同的线程ID?

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

我有一个问题:多个线程可以有相同的thread_id吗? (当然不是。)但是我的代码是这样做的。这怎么可能?

#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
#include<sys/types.h>

void* message(void* var){
int t = (int)var;


printf("\n%d- Hi I'm thread ID=%lu\n",t+1,(int unsigned long)pthread_self());
}

int main(void){
pthread_t threads[10];
int report[10];
for(int i=0;i<10;i++){
report[i] = pthread_create(&threads[i],NULL,message,(void*)i);
pthread_join(threads[i],NULL);
}
return 0;
}

我在(Ubuntu 17.04)的代码显示了这个结果

1- Hi I'm thread ID=3076250432

2- Hi I'm thread ID=3076250432

3- Hi I'm thread ID=3076250432

4- Hi I'm thread ID=3076250432

5- Hi I'm thread ID=3076250432

6- Hi I'm thread ID=3076250432

7- Hi I'm thread ID=3076250432

8- Hi I'm thread ID=3076250432

9- Hi I'm thread ID=3076250432

10- Hi I'm thread ID=3076250432

最佳答案

for(int i=0;i<10;i++){
report[i] = pthread_create(&threads[i],NULL,message,(void*)i);
pthread_join(threads[i],NULL);
}

您正在创建一个线程,然后立即加入它,等待它完成。这导致十个线程按顺序创建而不是并行创建,从而允许回收它们的 ID。

如果您在加入之前创建所有十个线程,您会看到不同的 ID。

for(int i=0;i<10;i++){
report[i] = pthread_create(&threads[i],NULL,message,(void*)i);
}

for(int i=0;i<10;i++){
pthread_join(threads[i],NULL);
}

关于c - 多个线程如何拥有相同的线程ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46469399/

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