linux中gettid 与 pthread_self函数区别

linux多线程环境下gettid() 、pthread_self() 两个函数都可以获得线程ID, 那么这两个有什么区别吗?

解释如下:

gettid是内核中的线程的ID, pthread_self是POSIX thread ID

线程库实际上由两部分组成:内核的线程支持+用户态的库支持(glibc),Linux在早期内核不支持线程的时候glibc就在库中(用户态)以线程(就是用户态线程)的方式支持多线程了,POSIX thread只要求了用户编程的调用接口对内核接口没有要求。linux上的线程实现就是在内核支持的基础上以POSIX thread的方式对外封装了接口,所以才会有两个ID的。

那么问题来了,该以哪个为准呢?

第一点, gettid是不可移植的。如果你换到别的系统上如何来保证程序的可移植性呢?除非你的程序只在linux上跑。

第二点,由于在Linux下POSIX thread 和系统thread是一对一的模型,所以可以认为一个gettid必然对应一个pthread id,但没有什么方法直接实现对两者的对应转换。

猜你喜欢

转载自blog.csdn.net/liangzhao_jay/article/details/79746794