进程和线程ID
发布网友
发布时间:2024-10-07 18:16
我来回答
共1个回答
热心网友
时间:2024-10-07 19:19
在Linux系统中,每个运行的程序,即我们熟知的进程,都有一个独一无二的标识,称为进程ID(PID)。那么线程ID又是什么呢?
当使用标准的pthread库创建线程时,每个线程的ID是由线程库自身生成的,确保在同个进程中线程ID不会重复。然而,跨进程的线程ID就不再受此约束,它们的唯一性无法由库本身保证。
实际上,线程库创建的用户态线程,直到被操作系统内核识别并纳入其管理范围,才会获得一个对应的内核级线程ID。这个内核级ID在整个操作系统中是全局唯一的,它在进行操作系统级别的进程间通信(IPC)时,用于唯一标识一个线程。
通常情况下,我们并不直接操作这个内核级的线程ID,因为主线程(main函数)的进程ID和线程ID在创建时是相同的(getpid()返回)。例如,在main函数中,getpid()和pthread_self()返回的值相同,而子线程中,这两个函数的返回值会有所区别,因为子线程的PID和线程ID不同,但它们在内核层的SYS_gettid值会显示出这种区别。
获取这三个ID的方法如下:
主线程的示例输出: main(), line = 21, getpid() = 0x8692 main(), line = 22, pthread_self() = 0x7f9f12fbc740, SYS_gettid = 0x8692
子线程的示例输出: subthread(), line = 14, getpid() = 0x8692 subthread(), line = 15, pthread_self() = 0x7f9f12fbb640, SYS_gettid = 0x8693