Junior — Middle
Aký je rozdiel medzi používaním NSLock a Semaphore pri správe vlákien?
sobes.tech AI
Odpoveď od AI
NSLock a Semaphore sú mechanizmy synchronizácie v iOS na riadenie prístupu k zdrojom v prostredí s viacerými vláknami, ale majú odlišné vlastnosti:
-
NSLock je jednoduchý exkluzívny zámok (mutex). Umožňuje jednému vláknu získať zámok, zatiaľ čo ostatné čakajú, kým nebude uvoľnený.
-
Semaphore (čítač) je všeobecnejší mechanizmus, ktorý umožňuje obmedziť počet vlákien, ktoré môžu súčasne pristupovať ku zdroju. Napríklad semaphore s číslom 1 sa správa ako mutex, ale môže byť nastavený na vyššie číslo, aby umožnil paralelný prístup obmedzenému počtu vlákien.
Hlavné rozdiely:
- NSLock je vhodný na ochranu kritických sekcií, keď je potrebný exkluzívny prístup.
- Semaphore je užitočný, keď chcete obmedziť počet súčasných operácií (napríklad pool vlákien alebo obmedzenie súčasných pripojení).
Príklad použitia NSLock:
let lock = NSLock()
lock.lock()
// kritická sekcia
lock.unlock()
Príklad použitia Semaphore:
let semaphore = DispatchSemaphore(value: 3) // umožňuje 3 súčasné prístupy
semaphore.wait()
// práca s zdrojom
semaphore.signal()
Voľba závisí od úlohy: exkluzívny prístup — NSLock, obmedzený počet súčasných prístupov — Semaphore.