Junior — Middle
Çox iplikli mühitdə NSRecursiveLock ilə standart NSLock arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
NSLock sadə qarşılıqlı istisna kilididir ki, başqa bir iş parçacı artıq kilidi tutursa, kritik bölməyə daxil olmasına imkan vermir. Əgər artıq NSLock tutan iş parçacı onu yenidən ələ keçirməyə çalışsa, o, bloklanacaq və bu, deadlock-a səbəb olacaq.
NSRecursiveLock fərqli olaraq, eyni iş parçacığının kilidi bir neçə dəfə ardıcıl ələ keçirməsinə imkan verir və bu, bloklanmadan baş verir. Bu, rekursiv metodlar eyni kiliddən istifadə etdikdə faydalıdır. NSRecursiveLock ələ keçirmələrin sayını izləyir və kilid yalnız unlock çağırışlarının müvafiq sayından sonra sərbəst buraxılır.
Nümunə:
let lock = NSRecursiveLock()
func recursiveFunction(_ count: Int) {
lock.lock()
defer { lock.unlock() }
if count > 0 {
recursiveFunction(count - 1) // eyni iş parçacığında rekursiv kilid ələ keçirmə
}
}
recursiveFunction(3)
Əgər NSLock istifadə olunsaydı, rekursiv çağırışda deadlock baş verərdi.