为什么先前被杀死的提升线程的线程ID被分配给新的提升线程?

时间:2018-05-14 11:17:53

标签: c++ multithreading boost

遇到提升线程线程ID的问题 方案如下 使用threadid假设1234生成Boost线程A. 生成线程B的线程为假设7890 生成Boost Thread C,此时线程A已完成其运行功能并结束,因此通过boost分配给线程C的线程ID为1234

从os角度来看,线程id应该是唯一的 为什么boost会将先前杀死的提升线程ID分配给新线程?

我必须调试一些问题,我需要一个独特的线程标识 (对线程id的重用会导致混淆)

是他们一种明确地将线程id分配给boost线程的方法 或任何其他唯一标识的增强螺纹

1 个答案:

答案 0 :(得分:1)

Boost不保证线程ID不会被重用。每the Boost documentation

  

主题ID

     

boost::thread::id的对象可用于标识线程。   每个正在运行的执行线程都有一个唯一的ID   通过调用boost::thread成员来对应get_id()   功能,或通过调用boost::this_thread::get_id()   线。可以复制和使用类boost::thread::id的对象   作为关联容器中的键:完整的比较范围   提供运营商。线程ID也可以写入输出   使用流插入运算符的流,虽然是输出格式   没有具体说明。

     

boost::thread::id的每个实例都指一些线程,或者   Not-a-Thread。引用Not-a-Thread的实例比较相等   相互之间,但不等于任何涉及实际的实例   执行的线程。 boost::thread::id上的比较运算符   产生每个不相等的线程ID的总订单。

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

您需要为线程对象创建自己的id,并确保它在进程的生命周期内不能重用。一个简单的同步64位单向计数器应该绰绰有余。即使你每秒创建1000个线程,它也可能需要1000亿年才能回归到零。你的过程不可能长时间运行。