可以在同一进程中重用相同的线程ID吗?

时间:2018-09-21 11:25:17

标签: c++ multithreading

我正在将每个线程的信息存储在映射中(映射的键是线程ID)。

但是,我想知道这是否真的是一个好主意。我看到每个线程都有不同的ID,但这确实意味着“每个线程”还是“每个活动线程”。我的意思是,在同一过程中,新线程可以使用与结束的旧线程相同的ID吗?

我体验到,在Android上,对于两个不同的线程,List<String> ids= driver.findElement(By.cssSelector("li[data-selector='refusal_alt'] > label")).stream().map(element->element.getAttribute("for")).collect(Collectors.toList()); 是不同的,而syscall(__NR_gettid)是相同的。是“ bug”还是只是可能发生?

2 个答案:

答案 0 :(得分:2)

在Linux上,boost::this_thread::get_id返回pthread_self()的结果:

  

保证线程ID仅在一个进程内唯一。加入终止线程或分离线程终止后,线程ID可以重新使用。

     

pthread_self()返回的线程ID与对gettid(2)的调用返回的内核线程ID不同。

答案 1 :(得分:2)

pthreadstd::threadboost::thread都使用)的文档说,

  

保证线程ID仅在一个进程内唯一。加入终止线程或终止分离线程后,可以重新使用线程ID。

http://man7.org/linux/man-pages/man3/pthread_self.3.html

因此,是的,新线程可能重用同一进程中死线程的ID。