Junior — Middle
Jaký je rozdíl mezi použitím NSLock a Semaphore při správě vláken?
sobes.tech AI
Odpověď od AI
NSLock a Semaphore jsou synchronizační mechanismy v iOS pro řízení přístupu ke zdrojům v prostředí s více vlákny, ale mají různé vlastnosti:
-
NSLock je jednoduchý mutex. Umožňuje jednomu vláknu získat zámek, zatímco ostatní čekají, až bude uvolněn.
-
Semaphore (čítač) je obecnější mechanismus, který umožňuje omezit počet vláken, která mohou současně přistupovat ke zdroji. Například semaphore s počítadlem 1 se chová jako mutex, ale lze nastavit vyšší hodnotu, aby umožnil paralelní přístup omezenému počtu vláken.
Hlavní rozdíly:
- NSLock je vhodný pro ochranu kritických sekcí, když je potřeba exkluzivní přístup.
- Semaphore je užitečný, když chcete omezit počet současných operací (například pool vláken nebo omezení současných připojení).
Příklad použití NSLock:
let lock = NSLock()
lock.lock()
// kritická sekce
lock.unlock()
Příklad použití Semaphore:
let semaphore = DispatchSemaphore(value: 3) // povolí 3 současné přístupy
semaphore.wait()
// práce s prostředkem
semaphore.signal()
Volba závisí na úkolu: exkluzivní přístup — NSLock, omezený počet současných přístupů — Semaphore.