【发布时间】:2017-05-21 13:20:49
【问题描述】:
在 linux 上,线程由 pthread_t 或 TID 标识。我正在寻找这两种线程 ID 之间的桥梁:
- 给定一个
pthread_t我可以得到它是TID吗? apparently 并非没有破解 pthread 的内部结构 :( 但我仍然在问是否有人有干净的方法来做到这一点。 - 给定一个
TID(或PID),我可以得到一个pthread_t句柄吗?
因为术语“线程 id”在这种情况下(和文档中)是模棱两可的,所以有点背景:
POSIX pthread API 定义了一个
pthread_t类型,所有查询/作用于线程的函数都使用pthread_t参数,我们可以获得这样的句柄,例如与pthread_self()。文档称这些“线程 ID”,但在这里我称它们为句柄以消除歧义,因为多个不同的pthread_t值可能代表同一个线程,因此需要pthread_equal(pthread_t, pthread_t)。另一方面,至少在 linux 上,有一个
TIDs 或线程 ID 的概念。可以通过系统调用获得当前的TID:syscall(SYS_gettid)。TID有一些有趣的属性,例如线程独有,与PIDs 相当,可以轻松识别主线程等。
【问题讨论】:
-
你打算用
TID做什么? -
@MaximEgorushkin:更容易调试/跟踪(因为它是独一无二的),在另一个主线程上执行操作,或者使用 pthread 未抽象的 linux 特定线程函数。