根据我的理解,TID
返回的(thread id)gettid()
在一个进程内部是唯一的(或者在一个有多个进程的程序内部,而每个进程可能有多个线程),即在一个进程内部,不同的线程有不同的thread id。
TID
返回的值跨进程是唯一的pthread_self()
,即在同一台机器上,同一台机器上的不同线程同时在不同的线程TID
。
我的理解正确与否?
此外,线程如何获得其派生线程的TID
(对应)?gettid()
谢谢!
根据我的理解,TID
返回的(thread id)gettid()
在一个进程内部是唯一的(或者在一个有多个进程的程序内部,而每个进程可能有多个线程),即在一个进程内部,不同的线程有不同的thread id。
TID
返回的值跨进程是唯一的pthread_self()
,即在同一台机器上,同一台机器上的不同线程同时在不同的线程TID
。
我的理解正确与否?
此外,线程如何获得其派生线程的TID
(对应)?gettid()
谢谢!
在 Linux 上为这个问题添加一些实现上下文:
gettid() 返回与内核进程调度程序中的线程条目相对应的值(与 getpid() 所认为的非常相似)。这是可以设置调度优先级和关联性的东西。
pthread_self() 返回指向进程内存映射中调用线程的 TLS(线程本地存储)槽附近的指针。显然,根据 TLS 的定义,这个值在给定进程中是唯一的(并且可以映射到内核 TID 并返回),但它不可能在系统范围内是唯一的,因为每个进程都有相同的虚拟地址范围。
在我的观察中 pthread_self() 在进程中不是唯一的。它在任何特定时刻都是独一无二的。但是当线程终止并在进程运行时启动其他线程时,它们可能会重用其他线程之前已经使用过的 pthread_self() 值。
pthread_self()
返回进程范围的唯一 pthread-id。
gettid()
返回(特定于 pthread 实现的)系统范围的唯一线程 ID(在 Linux 上)。
gettid() 返回的 TID(thread id) 在进程中是唯一的
是的。
(或在具有多个进程的程序中,
是的。
在一个进程中,不同的线程有不同的线程ID。
是的。
pthread_self() 返回的 TID 在进程中是唯一的,
不。
同一台机器上不同的线程同时有不同的TID。
是在同一过程中,否在整个机器上。
由于gettid()
是 Linux 特定的,因此不可移植,系统广泛识别 pthread 的唯一方法是使用它返回的(系统范围唯一的)父进程 IDgetpid()
以及它返回的(进程范围唯一的)pthread-id pthread_self()
。