Junior — Middle
Ar galite paaiškinti semaforo veikimo principą daugiagijų programavime?
sobes.tech AI
Atsakymas iš AI
Semaforas yra sinchronizacijos mechanizmas daugiagijų programavime, kuris kontroliuoja prieigą prie bendro ištekliaus. Jame yra skaitiklis, kuris rodo, kiek gijų gali vienu metu pasiekti išteklių.
Veikimo principas:
- Pradžioje semaforo skaitiklis nustatomas lygus prieinamų išteklių skaičiui.
- Kai gija nori gauti prieigą, ji iškviečia operaciją "wait" (arba "acquire"), kuri sumažina skaitiklį 1.
- Jei skaitiklis tampa mažesnis už nulį, gija yra užblokuojama ir laukia, kol kita gija atlaisvins išteklių.
- Kai gija atlaisvina išteklių, ji iškviečia operaciją "signal" (arba "release"), kuri padidina skaitiklį 1 ir atblokuoja laukiantįsias gijas.
Pavyzdys Swift kalba naudojant DispatchSemaphore:
let semaphore = DispatchSemaphore(value: 2) // leidžia vienu metu dirbti 2 gijoms
DispatchQueue.global().async {
semaphore.wait() // bandymas gauti prieigą
print("Gija pradėjo darbą")
sleep(2) // darbo simuliacija
print("Gija baigė darbą")
semaphore.signal() // išlaisvinti išteklių
}
Šiuo būdu semaforas padeda apriboti tų gijų skaičių, kurios vienu metu dirba su bendru ištekliu, užkertant kelią lenktynių sąlygoms ir užtikrinant duomenų vientisumą.