Was unterscheidet NSRecursiveLock von dem Standard-NSLock im Kontext der Multithreading?
sobes.tech KI
Antwort von AI
NSLock ist eine einfache gegenseitige Ausschluss-Sperre, die verhindert, dass ein Thread in den kritischen Abschnitt eintritt, wenn ein anderer Thread die Sperre bereits hält. Wenn ein Thread, der NSLock bereits hält, versucht, sie erneut zu erlangen, wird er blockiert, was zu einem Deadlock führt.
NSRecursiveLock unterscheidet sich darin, dass es demselben Thread erlaubt, die Sperre mehrfach hintereinander zu erlangen, ohne blockiert zu werden. Dies ist nützlich, wenn rekursive Methoden die gleiche Sperre verwenden. NSRecursiveLock führt einen Zähler für die Sperren, und die Sperre wird erst freigegeben, nachdem die entsprechende Anzahl von unlock-Aufrufen erfolgt ist.
Beispiel:
let lock = NSRecursiveLock()
func recursiveFunction(_ count: Int) {
lock.lock()
defer { lock.unlock() }
if count > 0 {
recursiveFunction(count - 1) // rekursive Sperrerlangung im selben Thread
}
}
recursiveFunction(3)
Wenn NSLock verwendet würde, würde bei rekursivem Aufruf ein Deadlock auftreten.