Sobes.tech
Junior — Middle

Millistes olukordades on otstarbekas kasutada Semaphore mehhanismi niitide sünkroniseerimiseks?

sobes.tech AI

Vastus AI-lt

Semafori (semafor) mehhanismit kasutatakse selleks, et piirata samaaegselt juurdepääsetavate niitide arvu konkreetsele ressursile või kriitilisele sektsioonile.

Soovitatav on kasutada semaforit, kui:

  • on vaja piirata samaaegsete operatsioonide arvu, näiteks ühenduspulga või piiratud arvu failide juurdepääsu puhul.
  • on vaja kontrollida paralleelsust, et vältida süsteemi ülekoormamist.
  • on vaja niitide sünkroniseerimist, kui mitu niiti peavad ootama ressursi vabastamist.

iOS-is kasutatakse semafore sageli asünkroonsete ülesannete haldamiseks, näiteks, et oodata mitme operatsiooni lõpetamist või piirata samaaegselt täidetavate ülesannete arvu.

Swift näide DispatchSemaphore kasutamisest:

let semaphore = DispatchSemaphore(value: 3) // maksimaalselt 3 niiti samaaegselt

func accessResource() {
    semaphore.wait() // vähendab loendurit, kui see on 0, niit blokeeritakse
    // Ressursiga töötamine
    print("Niit sai juurdepääsu")
    sleep(1) // töö simulatsioon
    semaphore.signal() // suurendab loendurit, vabastades koha
}

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

Selles näites saavad kuni 3 niiti samaaegselt ressursiga töötada.