Sobes.tech
Junior — Middle

Kokiose situacijose yra tinkama naudoti Semaphore mechanizmą srautų sinchronizavimui?

sobes.tech AI

Atsakymas iš AI

Semaphore (semaforas) mechanizmas naudojamas riboti tėkinių, į kuriuos vienu metu gali prieiti keli srautai, skaičių.

Rekomenduojama naudoti semaforą, kai:

  • reikia riboti vienu metu vykdomų operacijų skaičių, pavyzdžiui, prieigos prie jungčių baseino ar riboto skaičiaus failų.
  • reikia kontroliuoti paralelizaciją, kad išvengtumėte sistemos perkrovos.
  • reikalinga sinchronizacija, kai keli srautai turi laukti, kol bus atlaisvintas išteklius.

iOS semaforai dažnai naudojami asinchroninių užduočių valdymui, pavyzdžiui, laukiant kelių operacijų pabaigos arba ribojant vienu metu vykdomų užduočių skaičių.

Swift pavyzdys naudojant DispatchSemaphore:

let semaphore = DispatchSemaphore(value: 3) // maksimalus 3 srautai vienu metu

func accessResource() {
    semaphore.wait() // sumažina skaitiklį, jei 0, srautas blokuojamas
    // Darbas su ištekliu
    print("Srautas gavo prieigą")
    sleep(1) // darbo imitacija
    semaphore.signal() // padidina skaitiklį, atlaisvina vietą
}

for _ in 1...10 {
    DispatchQueue.global().async {
        accessResource()
    }
}

Šiame pavyzdyje, ne daugiau kaip 3 srautai gali vienu metu dirbti su ištekliu.