cppreference говорит, что std::memory_order_acquire
предотвратит переупорядочение чтения и записи перед ним. Поэтому я могу использовать std::memory_order_acquire
только для предотвращения переупорядочения во время выполнения без соответствующего std::memory_order_release
. Например
#include <atomic>
#include <stdint.h>
std::atomic<uint32_t> g_counter{};//Counter for thread in Fun
std::atomic<void*> g_data{};
void Fun()
{
g_counter.fetch_add(1, std::memory_order_acquire);//Warning:`fetch_add` maybe reorder after next 'load'
void *data = g_data.load(std::memory_order_acquire);
g_counter.fetch_sub(1, std::memory_order_relaxed);//just memory_order_relaxed will be ok
}
Это правда?