Ослабленный порядок memory_order_relaxed в C++
Только атомарность самой операции гарантирует memory_order_relaxed и не публикует другие записи потока.
Два потока прибавят к счетчику с relaxed-порядком и выведем сумму:
#include <atomic>
#include <iostream>
#include <thread>
int main() {
std::atomic<int> tally{0};
std::thread a([&]() {
tally.fetch_add(1, std::memory_order_relaxed);
});
std::thread b([&]() {
tally.fetch_add(1, std::memory_order_relaxed);
});
a.join();
b.join();
std::cout << tally.load() << "\n";
return 0;
}
Три потока делают fetch_add(1, std::memory_order_relaxed). Выведите load после всех join.