通过打包的任务创建一个线程并std::vector
返回一个。
#include <iostream>
#include <future>
#include <thread>
#include <vector>
std::vector<int> func(int &arg)
{
std::vector<int> v = {1,2,3,4};
arg = 10;
return v;
}
int main()
{
std::packaged_task<std::vector<int>(int &)> pt{func};
auto fut = pt.get_future();
int arg = 0;
std::thread thr{std::move(pt), std::ref(arg)};
auto vec = fut.get();
std::cout << arg << std::endl; // data race here ?
thr.join();
}
std::future
保证向量与线程同步(main
之前join
),但我不确定打包任务参数的状态(通过引用传递)。
所以问题是是否存在数据竞赛arg
?