【发布时间】:2020-09-10 19:29:52
【问题描述】:
尝试与packaged_task<T>合作
std::async 使用类模板std::future<T> 和get() 方法创建一个异步执行的线程并处理我们可以访问的数据。
我应该知道packaged_task<T> 的工作原理与std::async 的区别?
当我们调用task(x) 函数时,是否创建了与packaged_task<T> 相关的线程?
以代码为例:
#include <iostream>
#include <thread>
#include <future>
#include <chrono>
using namespace std::chrono;
int main()
{
int x(0),xr(0);
std::future<int> fdata = std::async(std::launch::async,[&](int data) mutable throw() ->
int
{data++;
std::this_thread::sleep_for(seconds(2));
return data;}
,x);
std::packaged_task<int(int)> task([&](int data) mutable throw() ->
int
{data++;
std::this_thread::sleep_for(seconds(2));
return data;}
);
std::future<int> xrp = task.get_future();
task(x);
xr=fdata.get();
std::cout<<xr<<std::endl;
std::cout<<xrp.get()<<std::endl;
return 0;
}
【问题讨论】:
标签: c++ multithreading asynchronous difference packaged-task