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(iliacquire), koja smanjuje brojač. - Ako brojač postane manji od nule, nit se blokira, čekajući oslobađanje resursa.
- Kada nit oslobodi resurs, poziva
signal(ilirelease), 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.