Junior — Middle
Ar galite paaiškinti, kas yra semaforas programavimo ir srautų sinchronizacijos kontekste?
sobes.tech AI
Atsakymas iš AI
Semaforas yra sinchronizacijos mechanizmas, naudojamas kontroliuoti kelių sriegių prieigą prie bendro ištekliaus.
Jame yra skaitiklis, kuris rodo, kiek sriegių gali vienu metu pasiekti išteklių. Kai sritis nori įeiti į kritinę sekciją, jis bando "pagauti" semaforą:
- Jei skaitiklis yra didesnis nei nulis, jis sumažinamas vienu ir sritis tęsia darbą.
- Jei skaitiklis yra lygus nuliui, sritis yra užblokuojama ir laukia, kol kitas sritis atlaisvins semaforą.
Kai sritis baigia darbą su ištekliu, jis atlaisvina semaforą padidindamas skaitiklį, leidžiant kitoms sritims tęsti.
Pavyzdys, kaip naudoti semaforą Swift (iOS):
let semaphore = DispatchSemaphore(value: 2) // leidžiama vienu metu 2 sritims
DispatchQueue.global().async {
semaphore.wait() // bando pagauti semaforą
print("Sritis pradėjo darbą")
sleep(2) // darbo simuliacija
print("Sritis baigė darbą")
semaphore.signal() // atlaisvina semaforą
}
Taip semaforas padeda kontroliuoti, kiek sriegių dirba vienu metu su bendru ištekliu, užkertant kelią lenktynių sąlygoms ir užtikrinant teisingą veikimą.