Sobes.tech
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.