首页 > 编程语言 > 详细

并发编程(2)线程管理

时间:2018-06-02 19:21:41      阅读:154      评论:0      收藏:0      [点我收藏+]

一、启动线程

void do_something();
std::thread t(do_something);

注意t是创建的线程,do_something是函数对象,不要传入函数。提供的函数对象会复制到新线程的存储空间当中,函数对象的执行和调用都在线程的内存空间中进行。

join(),detach()

二、线程传参

    线程调用传参

void f(int i,std::string const& s);
std::thread t(f,3,"hello");

  注意线程初始化不会对舛讹的参数隐式转换,需要显式转换。

三、转移线程所有权

   std::move()来转移线程所有权,转移后源线程将和执行线程没有关联。

void some_function();
void some_other_function();
std::thread t1(some_function); // 1
std::thread t2=std::move(t1); // 2
t1=std::thread(some_other_function); // 3
std::thread t3; // 4
t3=std::move(t2); // 5
t1=std::move(t3); // 6 赋值操作将使程序崩溃,T1已经有一个线程了。

四、运行时决定线程数量

   std::thread::hardware_concurrency()这个函数将返回能同时并发在一个程序中的线程数量。例如,多核系统中,返回值可以是CPU核芯的数量。因为上下文频繁的切换会降低线程的性能,所以肯定不想启动的线程数多于硬件支持的线程数量。

并发编程(2)线程管理

原文:https://www.cnblogs.com/huangfuyuan/p/9126295.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!