c++ - C++11 中的线程 ID 行为

标签 c++ multithreading c++11

我正在研究 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/

相关文章:

C++ 泛型变量

c++ - Lambda 函数无法在 Visual Studio 2010 中编译

c - 多线程环境下malloc的实现

c++ - 指针帮助 : dereferencing a pointer to a struct accessing data within it

c++ - 在 C++ 中沿着二维 vector (塔防)移动

c++ - 在原始字符串中扩展宏

c++ - C++11 模板中的默认位置参数

multithreading - 多线程,为什么此串行代码比其并行版本要快?

java - 拥有一个线程池比多个线程池更好的设计

linux - 如何在 Linux 中更改特定线程 (LWT) 的优先级?