Ответ
Lock (блокировка) — это примитив синхронизации, который гарантирует, что только один поток в данный момент может выполнять защищённый участок кода или доступ к общему ресурсу. Это предотвращает состояние гонки (race condition) и обеспечивает целостность данных.
Пример использования NSLock в Swift:
let lock = NSLock()
var sharedCounter = 0
DispatchQueue.global().async {
lock.lock()
// Критическая секция
sharedCounter += 1
lock.unlock() // Важно: всегда разблокировать!
}
Основные типы блокировок в iOS/macOS:
NSLock— базовая взаимная блокировка (mutex).NSRecursiveLock— позволяет одному и тому же потоку захватывать блокировку несколько раз без взаимной блокировки (deadlock) самого себя. Полезен в рекурсивных функциях.os_unfair_lock— высокопроизводительная блокировка из Darwin. Не является рекурсивной и должна использоваться с осторожностью.@synchronized(Objective-C) — устаревший подход, не рекомендуется к использованию в новом коде.
Важное правило: Всегда обеспечивайте выход из критической секции (вызов unlock()), даже в случае ошибки, чтобы избежать deadlock.