Sobes.tech
Junior — Middle

Можете ли објаснити принцип функционисања семафора у мултипоточном програмирању?

sobes.tech АИ

Одговор од АИ

Semafor je mehanizam za sinhronizaciju u višestrukom programiranju koji kontroliše pristup zajedničkom resursu. Sadrži brojač koji pokazuje koliko niti može istovremeno da pristupi resursu.

Princip rada:

  • Na početku, brojač semafora se postavlja na broj jednak dostupnim resursima.
  • Kada nit želi da pristupi, poziva operaciju "wait" (ili "acquire"), koja smanjuje brojač za 1.
  • Ako brojač postane manji od nule, nit se blokira i čeka dok druga nit ne oslobodi resurs.
  • Kada nit oslobodi resurs, poziva operaciju "signal" (ili "release"), koja povećava brojač za 1 i otključava čekajuće niti.

Primer u Swift-u sa DispatchSemaphore:

let semaphore = DispatchSemaphore(value: 2) // dozvoljava istovremeni rad 2 niti

DispatchQueue.global().async {
    semaphore.wait() // pokušaj pristupa
    print("Nit je počela sa radom")
    sleep(2) // simulacija rada
    print("Nit je završila sa radom")
    semaphore.signal() // oslobađanje resursa
}

Na ovaj način, semafor pomaže da se ograniči broj niti koje istovremeno rade sa zajedničkim resursom, sprečavajući trke i obezbeđujući integritet podataka.