我做了以下实验:
#include <iostream>
#include <thread>
void t()
{
std :: cout << std :: this_thread :: get_id() << std :: endl;
}
void f()
{
std :: cout << std :: this_thread :: get_id() << std :: endl;
}
int main()
{
std :: cout << std :: this_thread :: get_id() << std :: endl;
for(unsigned int i = 0; i < 1000; i++)
{
std :: thread d(t);
d.join();
std :: thread g(f);
g.join();
}
}
并注意到thread_id
s的结果列表将始终相同。换句话说,在这种情况下,只要线程被连接并重新打开,就会不断重新分配thread_id
。
现在,我是否可以确定这种情况会永远发生?或者,thread_id
只被分配一次,然后总是以类似随机的方式分配thread_id
不同的情况会发生吗?
答案 0 :(得分:3)
不,你不能认为它总是一样的。在VS2015上,我得到以下内容:
OnDestroy
答案 1 :(得分:0)
这里有一些文档:http://en.cppreference.com/w/cpp/thread/thread/id
重点是我的
类thread :: id是一个轻量级,易于复制的类,它充当std :: thread对象的唯一标识符。
此类的实例也可能包含不代表任何线程的特殊不同值。线程完成后,另一个线程可以重用std :: thread :: id 的值。
此类设计用作关联容器中的键,有序和无序。