pthread_self()究竟根据什么来得到线程的标识符????



#include<stdlib.h> #include<pthread.h> #include<stdio.h> #include<sched.h> #include<errno.h>

void*consumer(void*p) { sleep(10);//这句代码,主要是为了测试用的,说白了就是等到所有线程创建完毕后,在输出线程标识符 printf("(%lu) %lu\n",pthread_self(),(*(unsigned long int*)p));//注意这个格式 pthread_exit(NULL);

 } int main(int argc,char*argv[]) { printf("(%lu)\n",pthread_self()); pthread_t t1;int i=1; int ret ; do { ret=pthread_create(&t1,NULL,consumer,(void *)&t1); if(ret!=0) { printf("create failed,%d\n",ret); exit(1); } i++; } while(i<=8); sleep(20); return 0 ; } /* [root@linux Desktop]# gcc a.c -lpthread [root@linux Desktop]# ./a.out (3079116480) (3047644016) 3005684592 (3037154160) 3005684592 (3058133872) 3005684592 (3026664304) 3005684592 (3016174448) 3005684592 (3005684592) 3005684592 (3068623728) 3005684592 (3079113584) 3005684592 [root@linux Desktop]# */
根据这个输出结果让使我很疑惑,
pthread_self()函数究竟根据什么得到了线程标识符!,因为我只声明了一个变量t1啊!!!!
 
  

 

你可能感兴趣的:(pthread)