当前位置: 首页 > 科技观察

Thread、Future、Promise、Packaged_task、Async之间是什么关系?_0

时间:2023-03-14 15:30:48 科技观察

并发编程泛指多线程编程。C++11之后多线程编程有几个高级API:std::threadstd::futurestd::shared_futurestd::promisestd::packaged_taskstd::async可能很多人会用到不知道他们有什么联系之前有过,直接看这张图:从这张图我们可以大致看出:packaged_task≈promise+functionasync≈thread+packaged_task可以通过promise的get_future()和future的share()得到future可以得到shared_futurepromise而future是线程间的同步通道,类似于条件变量的封装,看它的用法:#include#include#includeintmain(){std::promiseprom;std::future<布尔>f=prom.get_future();舞会.set_value(真);std::cout<#include#includeintmain(){std::promiseprom;自动f=prom.get_future();std::threadt([](std::promisep){std::this_thread::sleep_for(std::chrono::seconds(2));p.set_value(100);},std::移动(舞会));std::cout<#include#includeintmain(){std::packaged_tasktask([](inta,intb){返回a+b;});autof=task.get_future();std::threadt(std::move(任务),1,2);std::cout<#include#includeintmain(){autof=std::async(std::launch::async,[](inta,intb){返回a+b;},1,2);std::cout<#include#includeintmain(){std::promiseprom;autofu=prom.get_future();autoshared_fu=fu.share();autof1=std::async(std::launch::async,[shared_fu](){std::cout<