Может кто-нибудь объяснить мне, почему изменение значений, захваченных по ссылке в лямбда-выражении std :: future, не дает ожидаемого результата? Смотрите код:
const int runs{ 1000 };
for (int run = 0; run < runs; ++run)
{
const int num{ 4 };
std::vector<bool> res(num, false);
std::vector<std::future<void>> futs(num);
for (int i = 0; i < num; ++i)
{
futs[i] = std::async(std::launch::async, [&res, i]
{
res[i] = true;
});
}
for (auto& fut : futs) fut.wait();
for (auto v : res) // I expect all values of res to be set to true.
{
if (!v) std::cerr << "Bad!!!\n"; // But this happens!
}
}