memory order между потоками даже на одной переменной.
Тоесть если взять пример с cppreference
r1 = y.load(std::memory_order_relaxed); // A
x.store(r1, std::memory_order_relaxed); // B
// Thread 2:
r2 = x.load(std::memory_order_relaxed); // C
y.store(42, std::memory_order_relaxed); // D
assert(x == y == 42); // can be true
и переделать его на одну переменную
r1 = x.load(std::memory_order_relaxed) & 1; // A
x.store(1 << 1, std::memory_order_relaxed); // B
// Thread 2:
r2 = x.load(std::memory_order_relaxed) & 2 >> 1; // C
x.store(1, std::memory_order_relaxed); // D
assert(x == y == 1); // can be true
То он тоже может выполняться?
relaxed кажется кроме того, что не будет уб из-за r/w w/w доступа к данным больше ничего не гарантирует
я ваш пример не понял, но memory_order исключительно про операции с памятью вокруг atomic переменной
Обсуждают сегодня