关闭

C++并发实战6:thread::id

标签: C++并发实战6threadid
2274人阅读 评论(0) 收藏 举报
分类:

         线程标识符id可以通过thread::get_id()获得,若thread obejct没有和任何线程关联则返回一个NULL的std::thread::id表示没有任何线程。当前线程若想获得自己的id可以调用std::this_thread::get_id()。

         thread::id对象可以被任意复制和比较。这里的比较语义是:若相等表示是同一个线程或者都没有线程,不等表示不同的线程。

bool operator== (thread::id lhs, thread::id rhs) noexcept;
bool operator!= (thread::id lhs, thread::id rhs) noexcept;
bool operator< (thread::id lhs, thread::id rhs) noexcept;
bool operator>= (thread::id lhs, thread::id rhs) noexcept;
bool operator> (thread::id lhs, thread::id rhs) noexcept;
bool operator>= (thread::id lhs, thread::id rhs) noexcept

       thread::id可以用于关联容器的key,可以用于排序,用于比较等用途。比如std::hash<std::thread::id>

        主线程在启动子线程之前记录下自己的master_thread,然后每个子线程启动时都去比较这个ID,若不是则执行do_common_work(),主线程则执行do_master_thread_work(),这样就可以将主线程和子线程的工作统一到一个函数中,但是主线程和子线程的工作又不一样。

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();
}

          thread::id可以作为关联容器的key,关联容器中可以根据key来存放线程的私有数据。

          输出线程标识符std::cout<<std::this_thread::get_id();

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:423399次
    • 积分:5982
    • 等级:
    • 排名:第4199名
    • 原创:187篇
    • 转载:7篇
    • 译文:1篇
    • 评论:80条
    博客专栏
    最新评论