c++ 多线程并发
std::thread的使用
参数
-
第一个参数为任何可调用类型:函数、类成员函数、类-实现了operator()
-
类成员函数,第二个参数为实例化对象的指针
-
-
线程内部有存储空间,参数按照默认的方式复制到该处、这些副本为临时变量,以右值的方式传递给线程
-
若要修改复制的方式,std::ref()传递的为参数引用
-
如果参数为临时对象,则默认是移动不是复制、否则调用std::move来说明是移动
-
常用方法
-
join():等待新线程执行完成
-
如果主线程运行抛出异常,而join未执行,则可能会被跳过,因此使用try catch保证一定执行join函数、更优雅的方式使用析构函数
-
-
detach():分离线程,切断线程和thread对象的关联
-
归属权、控制权转移给c++运行时库
-
每个thread对象值就能管控一个线程、赋新值会导致正在执行的线程终止整个程序
-
-
通过std::move实现线程在不同的thread对象之间转移(thread支持移动语义)
-
std::thread::hardware_concurrency() 获取并发线程数量,参考值,有可能为0
-