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