Junior — Middle
Šta razlikuje NSRecursiveLock od standardnog NSLock u kontekstu višestrukog izvršavanja?
sobes.tech АИ
Одговор од АИ
NSLock је једноставна међусобна искључива брава која не дозвољава једном току да уђе у критични одељак ако други ток већ држи браву. Ако покуша да је поново преузме ток који већ држи NSLock, он ће бити блокиран, што доводи до deadlock-а.
NSRecursiveLock се разликује по томе што омогућава истом току да више пута заредом преузме браву без блокирања. Ово је корисно када рекурзивне методе користе исту браву. NSRecursiveLock одржава бројач преузимања, а брава се ослобађа тек након одговарајућег броја позива unlock.
Пример:
let lock = NSRecursiveLock()
func recursiveFunction(_ count: Int) {
lock.lock()
defer { lock.unlock() }
if count > 0 {
recursiveFunction(count - 1) // рекурзивно преузимање браве у истом току
}
}
recursiveFunction(3)
Ако би се користио NSLock, при рекурзивном позиву дошло би до deadlock-а.