遇到提升线程线程ID的问题 方案如下 使用threadid假设1234生成Boost线程A. 生成线程B的线程为假设7890 生成Boost Thread C,此时线程A已完成其运行功能并结束,因此通过boost分配给线程C的线程ID为1234
从os角度来看,线程id应该是唯一的 为什么boost会将先前杀死的提升线程ID分配给新线程?
我必须调试一些问题,我需要一个独特的线程标识 (对线程id的重用会导致混淆)
是他们一种明确地将线程id分配给boost线程的方法 或任何其他唯一标识的增强螺纹
答案 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亿年才能回归到零。你的过程不可能长时间运行。