每个执行线程都有唯一标识符,用 thread::id类型的值表示。如果一个 thread不表示一个执行线程,则其id为默认的id。一个thread t的id可以通过调用 t.get_id()获得。
当前 thread的id可通过 this_thread::get_id()获得(见42.2.6节)
在下列情况下,一个 thread的id可以是id{}:
- 它并未被赋予一个任务;
- 它已结束;
- 它已被移动;
- 它已被
detach().
每个 thread都有一个id,但一个系统线程仍可以在没有id的情况下运行(即, detach()之后)。thread::id可以拷贝,且id可用常用的比较运算符(==、<等)进行比较、用<<输出以及用特例化版本hash<thread::id>计算哈希值(见31.4.3.4节)。例如
void print_id(thread& t){if(t.get_id()==id{})cout <<"t not joinable",elsecout <<"t's id is"<<t.get_id()<<'\n';}
注意,cout是一个全局共享对象,因此这些输出语句不保证生成可辨认的字符序列,除非你确认没有两个 thread同时向cout写数据(见iso.27.4.1节)。
