多线程进程的线程ID是否可以与另一个正在运行的进程的进程ID相同?

mgc*_*and 6 linux multithreading pthreads process linux-kernel

我正在尝试找到一种在多进程环境中唯一标识线程的方法.我有一个服务器跟踪连接到它的不同进程,其中一些是多线程的,而其中一些不是.要从多线程连接中识别线程,我使用线程ID作为唯一标识符(在任何给定时间最多连接1个多线程进程).我的问题是:这些线程之一的线程ID是否可能与系统上运行的另一个进程的进程ID相同?

在此先感谢您的帮助!

iab*_*der 9

根据pthreads手册页,线程ID在创建过程中是唯一的,因此是另一个线程或进程可以具有相同的ID.但是,如果它在一个进程中是唯一的,并且进程ID在系统中是唯一的,那么您可以将两者的组合用作唯一标识符.

进程中的每个线程都有唯一的线程标识符(存储在pthread_t类型中).该标识符返回给pthread_create(3)的调用者,并且线程可以使用pthread_self(3)获得自己的线程标识符. 线程ID仅保证在进程中是唯一的.


caf*_*caf 9

TID(由sys_gettid()系统调用返回)在系统1上的所有线程中是唯一的,对于单线程进程,PID和TID是相等的.这意味着TID永远不会与来自另一个进程的PID冲突.


1.需要注意的是,如果使用PID名称空间,则TID和PID仅在同一PID名称空间内是唯一的.

  • @andy:“SYS_gettid”返回的 Linux 线程 ID(在系统范围内是唯一的)和“pthread_t”类型的 POSIX 线程 ID(仅保证在进程范围内是唯一的)之间存在差异。 (2认同)