C++ 为什么以前终止的boost线程的线程id被分配给新的boost线程?

C++ 为什么以前终止的boost线程的线程id被分配给新的boost线程?,c++,multithreading,boost,C++,Multithreading,Boost,面临boost线程id的问题 情况如下 Boost线程A是使用threadid假设1234生成的 Boost线程B是使用threadid 7890生成的 生成了Boost线程C,此时线程A已完成其运行函数并结束,因此Boost分配给线程C的线程id为1234 从操作系统的角度来看,线程id应该是唯一的 为什么boost会将先前终止的boost线程id分配给新线程 我必须调试一些问题,我需要一个线程的唯一标识 对线程id的重用会导致混乱 它们是将线程id显式分配给boost线程的一种方法吗 或bo

面临boost线程id的问题 情况如下 Boost线程A是使用threadid假设1234生成的 Boost线程B是使用threadid 7890生成的 生成了Boost线程C,此时线程A已完成其运行函数并结束,因此Boost分配给线程C的线程id为1234

从操作系统的角度来看,线程id应该是唯一的 为什么boost会将先前终止的boost线程id分配给新线程

我必须调试一些问题,我需要一个线程的唯一标识 对线程id的重用会导致混乱

它们是将线程id显式分配给boost线程的一种方法吗
或boost线程的任何其他唯一标识

boost不保证线程ID不会被重用。Per:

线程ID

类boost::thread::id的对象可用于标识线程。 每个正在运行的执行线程都有一个可从 通过调用get_id成员执行相应的boost::thread 函数,或者通过在 线可以复制和使用boost::thread::id类的对象 作为关联容器中的键:完整的比较范围 提供操作员。线程ID也可以写入输出 使用stream insertion操作符的流,尽管输出格式 没有具体说明

boost::thread::id的每个实例要么引用某个线程,要么 不是一根线。引用非线程的实例比较相等 相互关联,但不等于引用实际 执行线程。boost::thread::id上的比较运算符 为每个不相等的线程ID生成一个总订单

请注意,线程ID保证仅在运行的线程之间是唯一的


您需要为线程对象创建自己的id,并确保在进程的生命周期内不能重用它。一个简单的同步64位单向计数器就足够了。即使每秒创建1000个线程,也可能需要1000亿年左右的时间才能恢复到零。您的流程不太可能运行那么长时间。

当有人说它是唯一的时,您必须准确定义它的含义。在这种情况下;唯一线程id是当前未使用的线程id;它并不意味着在操作系统运行时是唯一的;或在计算机的生命周期中是独一无二的;或唯一绝对值。从这个定义来看,独一无二;一旦你用线连接;没有理由不能重复使用该id。公平地说,如果线程未分离,则保证不会重复使用线程id。在这方面,它有点像僵尸进程。为了好玩:qalc 2^64/1000Hz到年份显示2^64/1000*赫兹=大约584.54205兆年