C ++ std :: this_thread :: get_id()传递给cout

时间:2017-10-10 08:35:27

标签: c++ multithreading c++11

当使用c ++ 11编译器在CodeBlocks上使用std::this_thread::get_id()时,线程编号从2开始。每次运行代码时,它都会打印线程2 - 6而不是0 - 4.为什么?

在后台运行的某些其他c ++应用程序是否可能正在使用线程ID 1和2?这是什么巫术?

#include <iostream>
#include <thread>
#include <mutex>
using namespace std;

std::mutex m;

class TClass
{
    public:
        void run()
        {
            m.lock();
            cout << "Hello, I'm thread " << std::this_thread::get_id() << endl;
            m.unlock();
        }
};

int main()
{
    TClass tc;
    std::thread t[5];
    for (int i=0; i<5; i++)
    {
        t[i] = std::thread(&TClass::run, &tc);
    }

    for (int i=0; i<5; i++)
    {
        t[i].join();
    }
    cout << "All threads terminated." << endl;
}

1 个答案:

答案 0 :(得分:4)

无法保证std::this_thread::get_id()返回的值。您不能假设该值将从零开始或将是顺序的。这是未指定