Sobes.tech
Junior — Middle

Ako je implementovaný mechanizmus semafora v systémoch synchronizácie?

sobes.tech AI

Odpoveď od AI

Mechanizmus semafora v systémoch synchronizácie sa používa na riadenie prístupu k zdieľaným zdrojom viacerými vláknami alebo procesmi. Semafor je čítač, ktorý ukazuje, koľko vlákien môže súčasne získať prístup ku zdroju.

V iOS (a všeobecne v systémoch založených na POSIX) sú semafory implementované cez API, napríklad dispatch_semaphore v GCD (Grand Central Dispatch). Hlavné operácie sú:

  • wait (alebo wait(timeout:)) — znižuje čítač semafora. Ak je čítač nulový, vlákno sa zablokuje a čaká, kým iné vlákno nevolá signal.
  • signal — zvyšuje čítač, odblokujúc čakajúce vlákno, ak existuje.

Príklad použitia v Swift:

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

// V jednom vlákne
semaphore.wait() // pokus o vstup
// kritická sekcia
semaphore.signal() // odchod

Týmto spôsobom semafor umožňuje obmedziť počet operácií, ktoré sa vykonávajú súčasne, napríklad prístup k databáze alebo sieťovému zdroju.

Dôležité body:

  • Ak je hodnota semafora väčšia ako 1, umožňuje viacerým vláknam prejsť súčasne.
  • Ak je 1, ide o binárny semafor, podobný mutexu.
  • Použitie semaforov pomáha predchádzať súťažným podmienkam a zabezpečuje správnu synchronizáciu.