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.