c++ 多线程并发

线程基本知识

std::thread的使用

参数

  1. 第一个参数为任何可调用类型:函数、类成员函数、类-实现了operator()

    • 类成员函数,第二个参数为实例化对象的指针

  2. 线程内部有存储空间,参数按照默认的方式复制到该处、这些副本为临时变量,以右值的方式传递给线程

    • 若要修改复制的方式,std::ref()传递的为参数引用

    • 如果参数为临时对象,则默认是移动不是复制、否则调用std::move来说明是移动

常用方法

  1. join():等待新线程执行完成

    • 如果主线程运行抛出异常,而join未执行,则可能会被跳过,因此使用try catch保证一定执行join函数、更优雅的方式使用析构函数

  2. detach():分离线程,切断线程和thread对象的关联

    • 归属权、控制权转移给c++运行时库

    • 每个thread对象值就能管控一个线程、赋新值会导致正在执行的线程终止整个程序

  3. 通过std::move实现线程在不同的thread对象之间转移(thread支持移动语义)

  4. std::thread::hardware_concurrency() 获取并发线程数量,参考值,有可能为0

  5. 获取线程id: thread对象调用get_id()、线程里面调用std::this_thread::get_id()

 

线程数据共享

 
posted @ 2022-05-05 00:36  cosinehzq  阅读(96)  评论(0)    收藏  举报