我对Scott Meyers撰写的有效现代C ++的第270页有疑问。
他在第5/6行中写道:“唯一的妙处是,每个响应线程都需要引用共享状态的std :: shared_future的ITS OWN COPY ...”
我的问题是:为什么我们必须将的副本传递给std::shared_future每个线程中的每个lambda函数?鉴于先验,我认为通过引用传递它没有任何问题,以至于存在不同线程使用的唯一共享状态?
即使我通过了SF标准参考书,我也写了一个代码,改编自Scott Meyers博士的书,该代码有效。
因此,是否可以通过引用传递它?
#include <future>
#include <vector>
std::promise<void> p;
void react(){}
void detect()
{
auto sf = p.get_future().share();
std::vector<std::thread> vt;
int n=10;
for(int i=0;i < n; i++)
{
vt.emplace_back([sf]{sf.wait();
react();
});
}
p.set_value();
for(auto& t : vt)
t.join();
}
int main()
{
detect();
return 0;
}
Run Code Online (Sandbox Code Playgroud)