Junior — Middle
Ar galėtumėte paaiškinti, kas yra semaforas ir kaip jis naudojamas procesų sinchronizacijai?
sobes.tech AI
Atsakymas iš AI
Semaforas yra sinchronizacijos mechanizmas, naudojamas valdyti prieigą prie bendro ištekliaus daugiasluoksnėje arba daugiaprocesinėje aplinkoje. Jis turi skaitiklį, kuris rodo, kiek sriegių arba procesų gali vienu metu pasiekti išteklių.
Veikimo principas:
- Pradiniame etape semaforo skaitiklis nustatomas į prieinamų išteklių skaičių.
- Kai sritis nori gauti prieigą, ji iškviečia operaciją
wait(arbaacquire), kuri sumažina skaitiklį. - Jei skaitiklis tampa mažesnis nei nulis, sritis yra blokuojama, laukdama išteklių atlaisvinimo.
- Kai sritis atlaisvina išteklių, ji iškviečia
signal(arbarelease), kuris padidina skaitiklį ir atblokuoja laukiantįsias sritis.
iOS, dirbant su semaforais, dažnai naudojama DispatchSemaphore klasė iš GCD:
let semaphore = DispatchSemaphore(value: 1) // 1 reiškia, kad išteklius yra prieinamas vienam sriegiui
// Sriegyje:
semaphore.wait() // laukia, kol išteklius taps prieinamas
// Darbas su ištekliu
semaphore.signal() // atlaisvina išteklių
Taip, semaforai padeda išvengti lenktynių sąlygų ir užtikrina teisingą prieigą prie bendrų išteklių.