我正在将每个线程的信息存储在映射中(映射的键是线程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”还是只是可能发生?
答案 0 :(得分:2)
在Linux上,boost::this_thread::get_id
返回pthread_self()
的结果:
保证线程ID仅在一个进程内唯一。加入终止线程或分离线程终止后,线程ID可以重新使用。
pthread_self()
返回的线程ID与对gettid(2)
的调用返回的内核线程ID不同。
答案 1 :(得分:2)
pthread
(std::thread
和boost::thread
都使用)的文档说,
保证线程ID仅在一个进程内唯一。加入终止线程或终止分离线程后,可以重新使用线程ID。
http://man7.org/linux/man-pages/man3/pthread_self.3.html
因此,是的,新线程可能重用同一进程中死线程的ID。