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.