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

原创 2013年12月04日 17:37:07

         线程标识符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();

相关文章推荐

C++11 thread::get_id(3)

原文地址:http://www.cplusplus.com/reference/thread/thread/get_id/ public member function std::...

std :: this_thread

this_thread 包装了一组可以访问当前线程信息的函数 functions 1、get_id()      获取当前线程的id。 // thread::get_id / this_...

C++11 this_thread::get_id(9)

原文地址:http://www.cplusplus.com/reference/thread/this_thread/get_id/ function std::this_thre...

c++之std::thread多线程的使用和获取pid/tid

// thread example #include // std::cout #include // std::thread #ifdef _WIN32 #incl...
  • earbao
  • earbao
  • 2017年02月17日 10:22
  • 1435

C++并发实战4:thread object is movable,not copyable

假设这样一个情形:假设函数A创建一个thread object返回给A的调用者,或者A将thread obejct转移给其它函数。thread object is movable but no cop...

C++并发实战:面试题6:线程一次性同步

是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能: 1)有一int型全局变量g_Flag初始值为0; 2) 在主线称中起动线程1,打印“this is thread1”,并将g_Fl...

Java并发编程(6):Runnable和Thread实现多线程的区别(含代码)

Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下...

java挑战高并发(6):Runnable和Thread实现多线程的区别(含代码)

Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下...

C++模板实战6:迭代器

1 迭代器的类型:    输入迭代器 、前向迭代器、双向迭代器、跳转迭代器以及输出迭代器。这五种迭代器的限制条件从左至右越来越强。 2 输入迭代器需满足的条件: X u(a); X可复制...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++并发实战6:thread::id
举报原因:
原因补充:

(最多只允许输入30个字)