Что такое SpinLock

«Что такое SpinLock» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SpinLock — это механизм синхронизации, при котором поток в цикле проверяет доступность ресурса, вместо блокировки и ожидания. Если ресурс занят, поток продолжает «крутиться» (spin), потребляя CPU, пока не получит доступ.

Особенности:

  • Быстрее, чем блокировка с ожиданием, если ресурс освобождается быстро.
  • Неэффективен при долгом удержании ресурса (тратит CPU).
  • В Android используется AtomicBoolean или ReentrantLock с tryLock().

Пример:

private val lock = AtomicBoolean(false)

fun doWork() {
    while (!lock.compareAndSet(false, true)) { /* Spin */ }
    try {
        // Критическая секция
    } finally {
        lock.set(false)
    }
}

⚠️ Важно: В Android предпочтительнее synchronized или Mutex из kotlinx.coroutines, так как SpinLock может привести к перерасходу батареи.