我正在研究 c++ 0x (C++11) 中对多线程的新支持。
所以每个线程都有一个 std::thread:id 类型的唯一标识符。
考虑下面的示例程序:
void hello_world()
{
std::cout<<"hello_world \n";
}
int main()
{
std::cout<<"Main thread id is "<<std::this_thread::get_id()<<"\n";
std::thread t(hello_world);
std::cout<<"Child thread id is ";
std::cout<<t.get_id()<<"\n";
t.join();
}
我得到了一个示例输出如下:
主线程id是140502917359424
子线程id是140502900623104
Hello World
我的示例输出中主线程的线程 ID 大于子线程 ID。
线程 ID 是否完全独立于它们的启动时间?
如果不是:有没有办法仅通过线程 ID 来区分线程 T1 是否比线程 T2 更早启动?
最佳答案
std::thread::get_id()
只是一个任意值,它唯一的属性是保证它对于当前运行的每个线程都是唯一的(但是当一个线程结束时它的 id 可以重复使用)。
为了判断哪个线程先启动,您只需要自己做:例如。维护一个计数器并以某种方式将值与线程相关联,方法是将两者都包装在一个类中,或者将值传递给线程函数,或者使用线程本地存储,......你明白了。
我想不出有任何 C++ 或系统工具可以为您做这件事,也许是因为知道一堆线程的相对创建顺序通常毫无意义。您只需激发他们的热情,让他们做好自己的工作。
关于c++ - C++11 中的线程 ID 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15460084/