并发编程线程管理

Posted FireLightning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程线程管理相关的知识,希望对你有一定的参考价值。

一、启动线程

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核芯的数量。因为上下文频繁的切换会降低线程的性能,所以肯定不想启动的线程数多于硬件支持的线程数量。

以上是关于并发编程线程管理的主要内容,如果未能解决你的问题,请参考以下文章

并发编程之线程安全性

转:Java并发编程之十九:并发新特性—Executor框架与线程池(含代码)

Scala并发编程reactloop代码实战具体解释

Java编程思想-并发

并发编程线程管理

Python 并发编程之线程