Ответ
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 может привести к перерасходу батареи.