Sobes.tech
Junior — Middle

Jak je implementován mechanismus semaforu v systémech synchronizace?

sobes.tech AI

Odpověď od AI

Mechanismus semaforu v systémech synchronizace se používá k řízení přístupu ke sdíleným zdrojům více vlákny nebo procesy. Semafor je čítač, který ukazuje, kolik vláken může současně získat přístup ke zdroji.

V iOS (a obecně v systémech založených na POSIX) jsou semafory implementovány přes API, například dispatch_semaphore v GCD (Grand Central Dispatch). Hlavní operace jsou:

  • wait (nebo wait(timeout:)) — snižuje čítač semaforu. Pokud je čítač nulový, vlákno se zablokuje a čeká, dokud jiné vlákno nevolá signal.
  • signal — zvyšuje čítač a odblokuje čekající vlákno, pokud existuje.

Příklad použití ve Swift:

let semaphore = DispatchSemaphore(value: 1) // binární semafor

// V jednom vlákně
semaphore.wait() // pokus o vstup
// kritická sekce
semaphore.signal() // odchod

Tímto způsobem semafor umožňuje omezit počet operací, které se provádějí současně, například přístup k databázi nebo síťovému zdroji.

Důležité body:

  • Pokud je hodnota semaforu větší než 1, umožňuje více vláknům projít současně.
  • Pokud je 1, je to binární semafor, podobný mutexu.
  • Použití semaforů pomáhá zabránit závodním podmínkám a zajišťuje správnou synchronizaci.