线程的标识符是线程ID,线程的ID类型是std::thread::id,可以有两种方式来获取。第一种,可以通过线程关联的thread object,调用object.get_id();如果object没有关联任何线程,那么get_id()返回std::thread::id默认构造函数,即没有线程。另一种方法是在当前运行的线程中调用std::this_thread::get_id()。
线程的ID可以拷贝和比较。如果两个线程ID相等,那么它们是同一个线程,或者它们都没有关联到线程。如果两个ID不同,那么它们是不同的线程,或者它们一个关联到线程,另一个没有关联到线程。
std::thread::id提供了所有的比较操作符。可以使用关联容器、排序或者比较。
常常使用线程ID来判断这个线程是否需要执行某些操作。例如,初始化线程创建了其他线程,用来执行算法的不同部分。这时在创建其他线程前先把自己ID记录下来,之后创建其他线程。然后可以判断当前线程是否是初始化线程。
std::thread::id master_thread;//记录主线程(初始化线程) void some_core_part_of_algorithm() { if(std::this_thread::get_id()==master_thread) { //初始化线程的工作 do_master_thread_work(); } do_common_work(); }
线程ID可以用作关联容器的键。比如,可以使用容器来控制线程来存储信息和线程之间的信息交换。
可以使用流输出来输出线程ID
std::cout<<std::this_thread::get_id();
这个数值其实没有什么意义。标准库只是保证比较两个线程ID时,如果ID相同,那么输出结果相同,否则结果不同。这在调试和记录是非常有用。至于ID具体数值,没什么意义。
原文地址:http://blog.csdn.net/kangroger/article/details/39968303