Junior — Middle
Çok iş parçacıklı bağlamda, NSRecursiveLock ile standart NSLock arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
NSLock, kritik bölgesine giriş yapmayı engelleyen basit bir karşılıklı dışlama kilididir, eğer başka bir iş parçacığı zaten kilidi tutuyorsa. Eğer kilidi zaten tutan bir iş parçacığı tekrar almaya çalışırsa, bu kilitlenir ve bu da bir deadlock’a yol açar.
NSRecursiveLock ise aynı iş parçacığının kilidi birden fazla kez almaya izin vermesiyle farklıdır. Bu, aynı kilidi kullanan özyinelemeli metodlar çağrıldığında faydalıdır. NSRecursiveLock, alınan kilit sayısını tutar ve kilit, karşılık gelen unlock çağrılarından sonra serbest bırakılır.
Örnek:
let lock = NSRecursiveLock()
func recursiveFunction(_ count: Int) {
lock.lock()
defer { lock.unlock() }
if count > 0 {
recursiveFunction(count - 1) // aynı iş parçacığında özyinelemeli kilit alma
}
}
recursiveFunction(3)
Eğer NSLock kullanılsaydı, özyinelemeli çağrıda deadlock oluşurdu.