同一线程 ID 是否可以在同一进程中重复使用?

Can the same thread ID be reused within the same process?

本文关键字:进程 线程 一线 ID 是否      更新时间:2023-10-16

我正在映射中存储每个线程的信息(map的键是线程ID(。

但是,我想知道这是否真的是一个好主意。我看到每个线程都有不同的 ID,但这真的意味着"每个线程"还是只是"每个活动线程"。我的意思是,在同一进程中,新线程可以使用与结束的旧线程相同的 ID 吗?

我在Android上体验到,对于两个不同的线程,奇怪的是syscall(__NR_gettid)是不同的,而boost::this_thread::get_id()是相同的。这是一个"错误",还是只是可能发生。

在 Linux 上,boost::this_thread::get_id返回pthread_self()的结果:

线程 ID 保证仅在进程中是唯一的。在连接已终止的线程或已分离的线程已终止后,可以重用线程 ID。

pthread_self()返回的线程 ID 与调用gettid(2)返回的内核线程 ID 不同。

pthread的文档(std::threadboost::thread都使用(说,

线程 ID 保证仅在进程中是唯一的。 在连接已终止的线程或已分离的线程已终止后,可以重用线程 ID。

http://man7.org/linux/man-pages/man3/pthread_self.3.html

因此,是的,新线程可能会重用同一进程中死线程中的 ID。