std :: future ::等待内存障碍吗? (我不能解释这个数据竞赛)

时间:2018-01-25 22:01:39

标签: c++ multithreading c++11

以下是代码:

std::future::wait

我的问题是std::future::wait是否会成为记忆障碍? std::future::wait等待函数调用完成,但函数是否发生在 std::future::wait之前(例如,函数调用引起的状态变化是否可以从其他线程看到)? / p>

如果{{1}}不作为内存屏障,我们如何实现线程池,以便在将来完成时自动触发内存屏障?

如果您认为我对记忆障碍的理解是错误的,请纠正我。

1 个答案:

答案 0 :(得分:9)

  

[container.requirements.dataraces] / 2 尽管 [res.on.data.races] ,但是当包含的内容时,需要实现以避免数据争用同一容器中不同元素中的对象例外vector<bool> ,会同时修改。

     

[container.requirements.dataraces] / 3 [注意:对于尺寸大于一的vector<int> xx[1] = 5和{ {1}}可以在没有数据争用的情况下同时执行,但同时执行*x.begin() = 10x[0] = 5可能会导致数据竞争。作为一般规则的例外,对于*x.begin() = 10vector<bool> y可能会与y[0] = true竞赛。 -end note ]

强调我的。比赛发生在y[1] = truea[i] = true;不是真正的容器,访问&#34;元素&#34;需要触摸相邻元素的位操作。