【发布时间】:2020-11-15 23:10:49
【问题描述】:
在运行此代码时,线程清理程序complains 关于数据竞争。 为什么?
#include <iostream>
#include <ranges>
#include <thread>
#include <vector>
int main(){
std::vector v{11,22,33,44,55,66};
auto view = v | std::ranges::views::filter([](const auto x){
return x>47;
});
std::jthread jt1([&]{
int sum =0;
for (const auto& val: view) {sum+=val;}
});
std::jthread jt2([&]{
int sum =0;
for (const auto& val: view) {sum+=val;}
});
}
注意:我知道这个问题的答案,我最近在看一个演讲时了解到它,但我发现它非常令人惊讶,并且没有与此相关的问题,所以我想分享它。如果没有人有兴趣回答,我会自己回答。
【问题讨论】:
标签: c++ race-condition c++20 range-v3