根据我的经验,似乎是
的结果std::this_thread::get_id()
在整个过程中是独一无二的:不同的进程之间的ID不同。
这是否由标准保证?
答案 0 :(得分:2)
线程ID的标准被授予者在不同的线程中是唯一的,它还表示终止的线程ID可能会被重用。它没有指定流程,也没有承认它们的存在,因此,它并不能保证流程的唯一性。
30.3.1.1
- thread :: id类型的对象为每个执行线程提供唯一标识符,为所有线程对象提供单个不同的值 不代表执行的线程(30.3.1)。每个线程 execute有一个关联的thread :: id对象,它不等于 thread ::任何其他执行线程的id对象,而不是 等于没有的任何std :: thread对象的thread :: id对象 表示执行线程。
- thread :: id应该是一个简单的可复制类(第9条)。库可以重用已终止线程的thread :: id的值 无法再加入。
醇>
该标准还隐藏了thread :: id的实现,它可能是一个int或其他东西。
答案 1 :(得分:1)
std :: thread在支持pthreads的环境中在pthreads之上实现。所以它变得没有(便携式)保证。
来自pthread_self手册:
保证线程ID仅在进程内是唯一的。一个
在终止线程加入后,可以重用线程ID,或者 分离的线程已经终止。