我有一个问题:多个线程可以有相同的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/