3

根据我的理解,TID返回的(thread id)gettid()在一个进程内部是唯一的(或者在一个有多个进程的程序内部,而每个进程可能有多个线程),即在一个进程内部,不同的线程有不同的thread id。

TID返回的值跨进程是唯一的pthread_self(),即在同一台机器上,同一台机器上的不同线程同时在不同的线程TID

我的理解正确与否?

此外,线程如何获得其派生线程的TID(对应)?gettid()谢谢!

4

3 回答 3

2

在 Linux 上为这个问题添加一些实现上下文:

  1. gettid() 返回与内核进程调度程序中的线程条目相对应的值(与 getpid() 所认为的非常相似)。这是可以设置调度优先级和关联性的东西。

  2. pthread_self() 返回指向进程内存映射中调用线程的 TLS(线程本地存储)槽附近的指针。显然,根据 TLS 的定义,这个值在给定进程中是唯一的(并且可以映射到内核 TID 并返回),但它不可能在系统范围内是唯一的,因为每个进程都有相同的虚拟地址范围。

于 2013-10-31T01:06:24.627 回答
2

在我的观察中 pthread_self() 在进程中不是唯一的。它在任何特定时刻都是独一无二的。但是当线程终止并在进程运行时启动其他线程时,它们可能会重用其他线程之前已经使用过的 pthread_self() 值。

于 2013-11-14T14:25:42.267 回答
1

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()

于 2013-05-17T13:38:16.053 回答