以下是代码:
std::future::wait
我的问题是std::future::wait
是否会成为记忆障碍? std::future::wait
等待函数调用完成,但函数是否发生在 std::future::wait
之前(例如,函数调用引起的状态变化是否可以从其他线程看到)? / p>
如果{{1}}不作为内存屏障,我们如何实现线程池,以便在将来完成时自动触发内存屏障?
如果您认为我对记忆障碍的理解是错误的,请纠正我。
答案 0 :(得分:9)
[container.requirements.dataraces] / 2 尽管 [res.on.data.races] ,但是当包含的内容时,需要实现以避免数据争用同一容器中不同元素中的对象例外
vector<bool>
,会同时修改。[container.requirements.dataraces] / 3 [注意:对于尺寸大于一的
vector<int> x
,x[1] = 5
和{ {1}}可以在没有数据争用的情况下同时执行,但同时执行*x.begin() = 10
和x[0] = 5
可能会导致数据竞争。作为一般规则的例外,对于*x.begin() = 10
,vector<bool> y
可能会与y[0] = true
竞赛。 -end note ]
强调我的。比赛发生在y[1] = true
。 a[i] = true;
不是真正的容器,访问&#34;元素&#34;需要触摸相邻元素的位操作。