Sobes.tech
Junior — Middle

Можете ли објаснити шта је семафор и како се користи за синхронизовање процеса?

sobes.tech АИ

Одговор од АИ

Semafor je mehanizam za sinhronizaciju koji se koristi za upravljanje pristupom zajedničkom resursu u okruženju sa više niti ili procesa. Sadrži brojač koji pokazuje koliko niti ili procesa može istovremeno da pristupi resursu.

Princip rada:

  • Inicialno, brojač semafora se postavlja na broj dostupnih resursa.
  • Kada nit želi da pristupi, poziva operaciju wait (ili acquire), koja smanjuje brojač.
  • Ako brojač postane manji od nule, nit se blokira, čekajući oslobađanje resursa.
  • Kada nit oslobodi resurs, poziva signal (ili release), koji povećava brojač i otključava čekajuće niti.

Na iOS-u, za rad sa semaforima često se koristi klasa DispatchSemaphore iz GCD:

let semaphore = DispatchSemaphore(value: 1) // 1 znači da je resurs dostupan za jednu nit

// U niti:
semaphore.wait()   // čeka dok resurs ne postane dostupan
// Rad sa resursom
semaphore.signal() // oslobađa resurs

Na ovaj način, semafori pomažu da se izbegnu trkaći uslovi i obezbeđuje ispravan pristup deljenim resursima.