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 多线程的主要内容,如果未能解决你的问题,请参考以下文章

C++11多线程

c++11多线程入门<学习记录;

C/C++C++11初探多线程

C/C++C++11初探多线程

C++11 多线程比单线程慢

C++11中多线程库