Sobes.tech
Junior — Middle

Kādās situācijās ir lietderīgi izmantot Semaphore mehānismu pavedienu sinhronizācijai?

sobes.tech AI

Atbilde no AI

Semaphore (semaforu) mehānisms tiek izmantots, lai ierobežotu vienlaicīgi pieejamo pavedienu skaitu konkrētam resursam vai kritiskajai sekcijai.

Ieteicams izmantot semaforu, kad:

  • nepieciešams ierobežot vienlaicīgu operāciju skaitu, piemēram, piekļuvi savienojumu baseinam vai ierobežotam failu skaitam.
  • ir nepieciešams kontrolēt paralēlismu, lai izvairītos no sistēmas pārslogojuma.
  • ir nepieciešama pavedienu sinhronizācija, kad vairāki pavedieni gaida resursa atbrīvošanu.

iOS semafori bieži tiek izmantoti asinhrono uzdevumu pārvaldībai, piemēram, gaidot vairākas operācijas pabeigšanu vai ierobežojot vienlaicīgi izpildāmo uzdevumu skaitu.

Swift piemērs, izmantojot DispatchSemaphore:

let semaphore = DispatchSemaphore(value: 3) // maksimāli 3 pavedieni vienlaicīgi

func accessResource() {
    semaphore.wait() // samazina skaitītāju, ja tas ir 0, pavediens tiek bloķēts
    // Darbs ar resursu
    print("Pavediens ieguva piekļuvi")
    sleep(1) // darba simulācija
    semaphore.signal() // palielina skaitītāju, atbrīvojot vietu
}

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

Šajā piemērā ne vairāk kā 3 pavedieni var vienlaicīgi strādāt ar resursu.