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 подскажет развёрнутый ответ в реальном времени.