Sobes.tech
Junior — Middle

Môžete vysvetliť princíp fungovania semafora v viacvláknovom programovaní?

sobes.tech AI

Odpoveď od AI

Semafor je mehanizem za sinhronizacijo v večnitnem programiranju, ki nadzoruje dostop do skupnega vira. Vsebuje števec, ki kaže, koliko niti lahko hkrati dostopa do vira.

Načelo delovanja:

  • Sprva je števec semaforja nastavljen na število razpoložljivih virov.
  • Ko želi dostopiti, nit pokliče operacijo "wait" (ali "acquire"), ki zmanjša števec za 1.
  • Če števec postane manjši od nič, je nit blokirana in čaka, dokler druga nit ne sprosti vira.
  • Ko nit sprosti vir, pokliče operacijo "signal" (ali "release"), ki poveča števec za 1 in odblokira čakajoče niti.

Primer v Swift-u z uporabo DispatchSemaphore:

let semaphore = DispatchSemaphore(value: 2) // dovoljuje hkratno delo 2 niti

DispatchQueue.global().async {
    semaphore.wait() // poskus dostopa
    print("Nit je začela z delom")
    sleep(2) // simulacija dela
    print("Nit je končala z delom")
    semaphore.signal() // sprostitev vira
}

Na ta način semafor pomaga omejiti število niti, ki hkrati delajo z skupnim virom, preprečuje tekmovalne pogoje in zagotavlja celovitost podatkov.