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