C++11 多线程
Posted 抿了抿嘴丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++11 多线程相关的知识,希望对你有一定的参考价值。
c++多线程
没有多线程的时候,在执行download的时候会卡住
在引入多线程之后,就可以在另一个线程中执行download,而在主线程中执行interact
join函数的作用
没有join的话,子线程可能会由于主线程退出而被迫退出
所以可以调用t1.join()等待子线程结束,主线程才结束
detach函数
当一个线程在函数中创建时,当函数结束时,该线程也会被解构,那么这个时候该线程还没被执行完,错误了
所以这个时候可以用detach函数(也可以在函数体里头join),detach函数与join的区别thread对象可以想象成一根指针,那么当调用detach的时候,该thread对象就是nonjoinable了,就不会报exception了
但是这个时候仍然存在:主进程退出,相关的所有线程都会退出的情况,这时候可以创建一个线程池(在main函数里join全部的线程)
C++20自动join所有子线程
一个线程调用joinable()函数判断该线程是否可以被join或者detach
异步
std::async产生一个带返回值的thread
std::async的get像是带返回值的join,而wait像是join
wait_for与status结合判断线程是否执行结束
用std::launch::deferred实现惰性求值
std::async 的底层实现:std::promise
std::shared_future
互斥量
std::lock_guard的上
以上是关于C++11 多线程的主要内容,如果未能解决你的问题,请参考以下文章