Приведи пример ситуаций, когда можно использовать Spinlock, а не Mutex

«Приведи пример ситуаций, когда можно использовать Spinlock, а не Mutex» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Spinlock лучше использовать в высоконагруженных сценариях с короткими критическими секциями, где ожидание блокировки минимально. Основные случаи:

  1. В ядерных/низкоуровневых операциях, где нельзя спать (например, обработчики прерываний)
  2. Для защиты очень коротких операций (1-2 инструкции)
  3. В ситуациях, где переключение контекста дороже ожидания (real-time системы)

Пример:

import "sync/atomic"

var lock uint32

func criticalSection() {
    for !atomic.CompareAndSwapUint32(&lock, 0, 1) {
        // spin
    }
    // короткая операция
    atomic.StoreUint32(&lock, 0)
}

Важно: в Go стандартной библиотеки нет спинлоков, их нужно реализовывать вручную через atomic. В большинстве случаев лучше использовать sync.Mutex.