Hardmemory-orderatomic

Что такое memory order в std::atomic?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Memory order — гарантии упорядочивания доступа к памяти для atomic-операции. По умолчанию seq_cst (самое строгое, дорогое). Остальные — для производительности.

// seq_cst (по умолчанию) — global total order, интуитивно, но mfence
flag.store(true);                     // memory_order_seq_cst

// release/acquire — паттерн producer/consumer без fence
data = 42;
ready.store(true, std::memory_order_release);   // producer
// --- другой поток ---
while (!ready.load(std::memory_order_acquire));
use(data);    // гарантированно увидит 42

// relaxed — только атомарность, без ordering (счётчики)
counter.fetch_add(1, std::memory_order_relaxed);
  • acquire (load) — последующие чтения/записи не переупорядочатся выше;
  • release (store) — предыдущие не переупорядочатся ниже;
  • relaxed — нет ordering, только атомарность.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.