[英]Is it correct to use memory_order_relaxed at this code?
在以下代码中使用std::memory_order_relaxed
是否正确?
#include <atomic>
#include <array>
#include <iostream>
#include <thread>
using namespace std;
int main() {
std::atomic<int> counter(0);
constexpr size_t thread_count = 10;
std::array<std::thread, thread_count> threads;
for (auto& th : threads) {
th = std::thread([&counter]() {
for (int j = 0; j < 100; ++j) {
/*1*/ counter.fetch_add(1, std::memory_order_relaxed);
}
});
}
for (auto& th : threads) th.join();
/*2*/ std::cout << counter.load(std::memory_order_relaxed) << std::endl;
return 0;
}
我有一个方法调用计数器。 计数器何时实际递增( /*1*/
)并不重要,如果它会增加一段时间就足够了。 但是当我调用atomic::load
( /*2*/
)时,所有已经进行的计数器更改都应该是可见的。
std::memory_order_relaxed
/*1*/
和/*2*/
使用std::memory_order_relaxed
是否正确?
是的,没关系。 线程连接提供必要的同步点,以确保最终load()
看到正确的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.