Sobes.tech
Junior — Middle

Mohol by ste vysvetliť, čo je semafor a ako sa používa na synchronizáciu procesov?

sobes.tech AI

Odpoveď od AI

Semafor je mechanizmus synchronizácie používaný na riadenie prístupu ku zdieľanému zdroju v prostredí s viacerými vláknami alebo procesmi. Obsahuje čítač, ktorý ukazuje, koľko vlákien alebo procesov môže súčasne získať prístup ku zdroju.

Princíp fungovania:

  • Na začiatku je čítač semaforu nastavený na počet dostupných zdrojov.
  • Keď vlákno chce získať prístup, volá operáciu wait (alebo acquire), ktorá znižuje čítač.
  • Ak sa čítač stane menší ako nula, vlákno je zablokované a čaká na uvoľnenie zdroja.
  • Keď vlákno uvoľní zdroj, volá signal (alebo release), ktorý čítač zvýši a odblokuje čakajúce vlákna.

V iOS sa na prácu so semaforami často používa trieda DispatchSemaphore z GCD:

let semaphore = DispatchSemaphore(value: 1) // 1 znamená, že zdroj je dostupný pre jedno vlákno

// Vo vlákne:
semaphore.wait()   // čaká, kým bude zdroj dostupný
// Práca so zdrojom
semaphore.signal() // uvoľní zdroj

Takto semafory pomáhajú predchádzať súťažným podmienkam a zabezpečujú správny prístup ku zdieľaným zdrojom.