Hardlock-freeperformance
Чем lock-free лучше mutex?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Lock-free (через atomic CAS) — без блокировки потока; mutex — блокирует. Lock-free выигрывает в специфичных случаях: нет kernel transition, нет preemption problem (поток с mutex может быть приостановлен ОС), нет priority inversion.
// Mutex: при contention — kernel transition
std::mutex m;
std::lock_guard<std::mutex> lk(m);
++counter;
// Lock-free: atomic, без блокировки
std::atomic<int> counter{0};
counter.fetch_add(1, std::memory_order_relaxed);- минусы lock-free: сложнее писать (ABA problem), часто медленнее mutex при низкой contention (overhead CAS loop), нет fairness;
- memory reclamation — hazard pointers, RCU.
Эмпирическое правило: mutex для 99% случаев, lock-free — для latency-critical (HFT, real-time). Профиль перед оптимизацией.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.