C++ 多线程(3)std::thread 详解
2021-01-02 01:28
标签:src head 调用 containe memory 拷贝构造函数 get 线程 就会 @ std::thread 在 (1). 默认构造函数,创建一个空的 thread 执行对象。 std::thread 各种构造函数例子如下(参考): 指向当前线程std::this_thread 1、线程(函数)的传入参数,引用&会失效,指针*还是会传递地址。因为主线程如果销毁了变量内存,子线程的运行就会出错,因此尽量不要在detach()的线程中用传递主线程中的指针 https://en.cppreference.com/w/cpp/thread/thread/thread C++ 多线程(3)std::thread 详解 标签:src head 调用 containe memory 拷贝构造函数 get 线程 就会 原文地址:https://www.cnblogs.com/long5683/p/12995049.html
一、头文件
二、std::thread 构造函数
(2). 初始化构造函数,创建一个 thread对象,该 thread对象可被 joinable,新产生的线程会调用 fn 函数,该函数的参数由 args 给出。
(3). 拷贝构造函数(被禁用),意味着 thread 不可被拷贝构造。
(4). move 构造函数,move 构造函数,调用成功之后 x 不代表任何 thread 执行对象。 注意:可被 joinable 的 thread 对象必须在他们销毁之前被主线程 join 或者将其设置为 detached.
#include
三、其他成员函数
例如std::this_thread::get_id()
get_id
获取线程 ID。
joinable
检查线程是否可被 join。
join
Join 线程。
detach
Detach 线程
swap
Swap 线程 。
native_handle
返回 native handle。
hardware_concurrency [static]
检测硬件并发特性
四、传递临时参数作为线程对象的注意事项
注意:以下问题主要都是在detach情况下发生,join下不会发生。
线程(函数)的传入参数,引用&会失效,指针*还是会传递地址。
#include
4.1 解决办法:
#include
4.2 原因分析
#include
4.3 总结
2、为了防止主线程先结束,detach()的线程还没构造,调用构造的时候要显示的调用类的拷贝构造,即为了防止主线程先结束,只有复制一份内存才行
3、想要传递真正的引用需要使用std::ref(param_nanm)thread thread_obj(func,std::ref(num))
五、传递类对象、智能指针作为线程参数
5.1 修改子线程中的对象,不会影响主线程中的对象
#include
5.2 传递智能指针
#include
参考链接: