Junior — Middle
Можете ли објаснити шта је семафор у контексту програмирања и синхронизације нитева?
sobes.tech АИ
Одговор од АИ
Semafor je mehanizam za sinhronizaciju koji se koristi za kontrolu pristupa više niti zajedničkom resursu.
Sadrži brojač koji pokazuje koliko niti može istovremeno da pristupi resursu. Kada nit želi da uđe u kritičnu sekciju, pokušava da "uhvati" semafor:
- Ako je brojač veći od nule, smanjuje se za jedan i nit nastavlja.
- Ako je brojač nula, nit se blokira i čeka dok druga nit ne oslobodi semafor.
Kada nit završi rad sa resursom, oslobađa semafor povećavajući brojač, omogućavajući drugim nitima da nastave.
Primer korišćenja semafora u Swift (iOS):
let semaphore = DispatchSemaphore(value: 2) // dozvoljavamo 2 niti istovremeno
DispatchQueue.global().async {
semaphore.wait() // pokušava da uhvati semafor
print("Nit je počela sa radom")
sleep(2) // simulacija rada
print("Nit je završila sa radom")
semaphore.signal() // oslobađa semafor
}
Na ovaj način, semafor pomaže u kontroli broja niti koje rade istovremeno sa zajedničkim resursom, sprečavajući trkaće uslove i obezbeđujući ispravno funkcionisanje.