Sobes.tech
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.