线程具有相同的ID

我学习线程。 我已经读过该线程在一个函数之外终止(它作为参数传递给pthread_create函数)。 所以我在循环中创建线程,它们被执行,之后它们被终止。 (对不起一些长代码)

但是当我调用函数pthread_create时,新线程获得相同的ID。 为什么?

struct data { FILE *f; }; void *read_line_of_file(void *gdata) { pthread_mutex_lock(&g_count_mutex); // only one thread can work with file, //doing so we block other threads from accessing it data *ldata = (data *) gdata; char line[80]; int ret_val =fscanf(ldata->f,"%s",line); pthread_mutex_unlock(&g_count_mutex); // allow other threads to access it if (ret_val != EOF) printf("%s %lu\n ", line, pthread_self()); // some time consuming operations, while they are being executed by one thread, // other threads are not influenced by it (if there are executed on different cores) volatile int a=8; for (int i=0;i <10000;i++ ) for (int i=0;i <10000;i++ ) { a=a/7+i; } if (ret_val == EOF) // here thread ends pthread_exit((void *)1); pthread_exit((void *)0); } int main() { int kNumber_of_threads=3, val=0; pthread_t threads[kNumber_of_threads]; int ret_val_from_thread=0; data mydata; mydata.f = fopen("data.txt","r"); if ( mydata.f == NULL) { printf("file is not found\n"); return 0; } for( ; val != 1 ;) { // THIS IS THAT PLACE, IDs are the same (according to the number of processes), // I expected them to be changing.. for(int i=0; i<kNumber_of_threads; i++) { pthread_create(&threads[i],NULL,read_line_of_file, &mydata); } for(int i=0; i<kNumber_of_threads; i++) { pthread_join(threads[i], (void **) &ret_val_from_thread); if (ret_val_from_thread != 0) val = ret_val_from_thread; } printf(" next %d\n",val); } printf("work is finished\n"); fclose(mydata.f); return 0; } 

结果,我看到线程的id没有被改变:

在此处输入图像描述

我想知道,真正创造了新线程吗?

提前致谢!

线程ID仅保证在当前运行的线程中不同。 如果您销毁一个线程并创建一个新线程,它可能会使用以前使用的线程ID创建。