【C/C++】C++ 11 多线程学习总结

  1. 包含头文件 #include <thread>
  2. 创建线程 t1: thread t1(函数名);
  3. 主线程等待t1线程结束后再运行 : t1.join()
  4. 主线程不需要等待t1线程结束:  t1.detach()   *线程一旦被detach便不能再join
  5. 判断线程能否 join : t1.joinable() 
  6. *线程对象不能被赋值 “ = ” , 只能被移动 “ move() ”
  7. 输出当前线程ID : this_thread::get_id();||  t1.get_id() 
  8. 当前CPU可执行的进程数: hardware_concurrency();

     

  9. 解决互斥竞争所包含头文件 #include <mutex>  ,创建互斥对象mutex  mu;
  10. 对互斥资源的占领:  mu.lock(); 释放:mu.unlock() 
  11. * *    如果互斥资源发生异常,互斥对象mu讲会被一直占领
  12. lock_guard
  13. unique_lock:  为指定的某行代码添加lock();
  14. **     lock_guard 不能移动lock , unique_lock 可以移动lock ;且unique_lock比 lock_guard更耗费系统资源

  15. 避免死锁的方式:

  16. 尽量使用一个mutex

  17. 使用多个mutex时,保证locker顺序一致

  18. 或者使用lock()对互斥资源占领

  19. once_flag

  20. call_once


    条件变量

  21. 头文件 #include <condition_variable>   
  22. 定义条件变量cv:  std::condition_variable cv;
  23. 若线程1中使用  cv.notify_one();//唤醒包含cv.wait()函数的线程

future    async    promis  :在不同线程之间传递数据,

  1. 包含头文件:  #include <future>
  2.    std::future<int> fu =  std::async ( (默认参数 可省略),函数名 ,传递参数)
  3. fu.get()取得目标函数返回值,但注意get()只能被调用一次
  4. 默认参数有:std::launch::deferred  ||  std::launch::async ,
  5. std::launch::async 当返回的future失效前会强制执行目标函数,即不调用future.get也会保证目标函数的执行。但std::launch::deferred 仅当调用future.get()时才会执行目标函数,如果创建async时不指定launch policy,他会默std::launch::async|std::launch::deferred,根据情况选一种执行 【此小点参考:https://blog.csdn.net/racaljk/article/details/80142353
  6. 定义一个int型的 promise 变量并命名为p :   std::promise<int>  p;
  7. std::future<int> f = p.get_future () ;
  8. p.set_value( );
  9. promise和future只能move
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值