这里是代码:
我的问题是,
如果
如果您认为我对内存屏障的理解有误,请纠正我。
std::vector<bool> a(req_count_);
std::vector<std::future<void>> waits(req_count_);
for (int i = 0; i < req_count_; i++) {
// send into a threadpool implementation
waits[i] = framework::Async([i, &a] {
a[i] = true; // write true
});
}
for (int i = 0; i < req_count_; i++) {
waits[i].wait(); // memory barrier?
}
int last_req_count = req_count_;
req_count_ = 0;
for (int i = 0; i < last_req_count; i++) {
if (!a[i]) { // read false
return false;
}
}
我的问题是,
std::future::wait
是否作为内存屏障?std::future::wait
等待函数调用完成,但是函数 先于 std::future::wait
发生(例如,函数调用引起的状态更改是否在其他线程中可见)?如果
std::future::wait
不作为内存屏障,我们如何实现线程池,以便在未来完成时自动触发内存屏障?如果您认为我对内存屏障的理解有误,请纠正我。
a
,那么数据竞争就消失了。也许future::wait
只是确保从future::get
返回的值是有效的?(试图证明它不是一个内存屏障的可能性) - Helin Wang<atomic>
头文件。 - Mgetz