Sobes.tech
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ą.