Junior — Middle
Môžete vysvetliť, čo je semafor v kontexte programovania a synchronizácie vlákien?
sobes.tech AI
Odpoveď od AI
Semafor je mehanizem za sinhronizacijo, ki se uporablja za nadzor dostopa več niti do skupnega vira.
Vsebuje števec, ki kaže, koliko niti lahko hkrati dostopa do vira. Ko želi niti vstopiti v kritično sekcijo, poskuša "zgrabiti" semafor:
- Če je števec večji od nič, se zmanjša za enega in niti nadaljuje.
- Če je števec enak nič, se niti blokira in čaka, da druga nit sprosti semafor.
Ko nit konča z delom z virom, sprosti semafor tako, da poveča števec, kar omogoči drugim nitim, da nadaljujejo.
Primer uporabe semaforja v Swift (iOS):
let semaphore = DispatchSemaphore(value: 2) // dovoljuje 2 niti hkrati
DispatchQueue.global().async {
semaphore.wait() // poskuša ujeti semafor
print("Nit je začela z delom")
sleep(2) // simulacija dela
print("Nit je končala z delom")
semaphore.signal() // sprosti semafor
}
Na ta način semafor pomaga nadzorovati število niti, ki hkrati delajo z skupnim virom, preprečuje tekmovalne pogoje in zagotavlja pravilno delovanje.