线程ID分配有多整洁?

时间:2016-06-24 15:05:18

标签: c++ multithreading

我做了以下实验:

#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不同的情况会发生吗?

2 个答案:

答案 0 :(得分:3)

不,你不能认为它总是一样的。在VS2015上,我得到以下内容:

OnDestroy

答案 1 :(得分:0)

这里有一些文档:http://en.cppreference.com/w/cpp/thread/thread/id

重点是我的

  

类thread :: id是一个轻量级,易于复制的类,它充当std :: thread对象的唯一标识符。

     

此类的实例也可能包含不代表任何线程的特殊不同值。线程完成后,另一个线程可以重用std :: thread :: id 的值

     

此类设计用作关联容器中的键,有序和无序。