Hardconcurrencymemory order
Что такое memory order и атомарные операции?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
std::atomic<T> гарантирует неделимость операций. Но кроме неделимости важна видимость изменений между потоками — memory order. По умолчанию memory_order_seq_cst (самая строгая, дорогая); слабее: acquire, release, relaxed.
std::atomic<bool> ready{false};
int data = 0;
// поток A
data = 42;
ready.store(true, std::memory_order_release);
// поток B
while (!ready.load(std::memory_order_acquire)) {}
assert(data == 42); // гарантируется: всё до release видно после acquire- seq_cst — последовательная согласованность (дефолт, самая дорогая);
- acquire (чтение) / release (запись) — пара создаёт happens-before;
- relaxed — только атомарность, без гарантий порядка.
Слишком слабый order = баг, слишком сильный = медленно. std::mutex даёт acquire/release бесплатно.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.