我创建了一个简单的测试来检查怎么std::memory_order_relaxed快于std::memory_order_seq_cst对价值atomic<int>增量.然而,两种情况的表现都相同.
我的编译器:gcc版本7.3.0(Ubuntu 7.3.0-27ubuntu1~18.04)
构建参数:g ++ -m64 -O3 main.cpp -std = c ++ 17 -lpthread
CPU:Intel(R)Core(TM)i7- 2670QM CPU @ 2.20GHz,4核,每核2线程
测试代码:
#include <vector>
#include <iostream>
#include <thread>
#include <atomic>
#include <chrono>
#include <functional>
std::atomic<int> cnt = {0};
void run_test_order_relaxed()
{
std::vector<std::thread> v;
for (int n = 0; n < 4; ++n) {
v.emplace_back([]() {
for (int n = 0; n < 30000000; ++n) {
cnt.fetch_add(1, std::memory_order_relaxed);
}
});
}
std::cout << "rel: " << cnt.load(std::memory_order_relaxed); …Run Code Online (Sandbox Code Playgroud)