每个LinuxThreads线程都同时具有线程id和进程id,其中进程id就是内核所维护的进程号,而线程id则由LinuxThreads分配和维护。
__pthread_initial_thread 的线程id为PTHREAD_THREADS_MAX,__pthread_manager_thread的是 2*PTHREAD_THREADS_MAX+1,第一个用户线程的线程id为PTHREAD_THREADS_MAX+2,此后第n个用户线程的线程 id遵循以下公式:
tid=n*PTHREAD_THREADS_MAX+n+1
这种分配方式保证了进程中所有的线程(包括已经退出)都不会有相同的线程id,而线程id的类型pthread_t定义为无符号长整型(unsigned long int),也保证了有理由的运行时间内线程id不会重复。
从线程id查找线程数据结构是在pthread_handle()函数中完成的,实际上只是将线程号按PTHREAD_THREADS_MAX取模,得到的就是该线程在__pthread_handles中的索引。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31404751/viewspace-2127018/ ,如需转载,请注明出处,否则将追究法律责任。