std :: thread :: id在进程中是唯一的吗?

时间:2015-09-28 13:38:12

标签: c++11 stl stdthread

根据我的经验,似乎是

的结果
std::this_thread::get_id()

在整个过程中是独一无二的:不同的进程之间的ID不同。

这是否由标准保证?

2 个答案:

答案 0 :(得分:2)

线程ID的标准被授予者在不同的线程中是唯一的,它还表示终止的线程ID可能会被重用。它没有指定流程,也没有承认它们的存在,因此,它并不能保证流程的唯一性。

  

30.3.1.1

     
      
  1. thread :: id类型的对象为每个执行线程提供唯一标识符,为所有线程对象提供单个不同的值   不代表执行的线程(30.3.1)。每个线程   execute有一个关联的thread :: id对象,它不等于   thread ::任何其他执行线程的id对象,而不是   等于没有的任何std :: thread对象的thread :: id对象   表示执行线程。
  2.   
  3. thread :: id应该是一个简单的可复制类(第9条)。库可以重用已终止线程的thread :: id的值   无法再加入。
  4.   

该标准还隐藏了thread :: id的实现,它可能是一个int或其他东西。

答案 1 :(得分:1)

std :: thread在支持pthreads的环境中在pthreads之上实现。所以它变得没有(便携式)保证。

来自pthread_self手册:

  

保证线程ID仅在进程内是唯一的。一个
  在终止线程加入后,可以重用线程ID,或者   分离的线程已经终止。