Junior — Middle
Kas saaksite selgitada, mis on semafor ja kuidas seda kasutatakse protsesside sünkroniseerimiseks?
sobes.tech AI
Vastus AI-lt
Semaphor on sünkroniseerimismehhanism, mida kasutatakse ühise ressursi juurdepääsu haldamiseks mitme niidi või protsessi keskkonnas. See sisaldab loendurit, mis näitab, mitu niiti või protsessi saab samaaegselt ressursile juurde pääseda.
Tööpõhimõte:
- Alguses seatakse semafori loendur olemasolevate ressursside arvule.
- Kui niit soovib juurde pääseda, kutsub ta välja operatsiooni
wait(võiacquire), mis vähendab loendurit. - Kui loendur muutub väiksemaks kui null, on niit blokeeritud, oodates ressursi vabastamist.
- Kui niit vabastab ressursi, kutsub ta välja
signal(võirelease), mis suurendab loendurit ja avab ootavad niidid.
iOS-is kasutatakse semaforitega töötamiseks sageli GCD DispatchSemaphore klassi:
let semaphore = DispatchSemaphore(value: 1) // 1 tähendab, et ressurss on saadaval ühe niidi jaoks
// Niidis:
semaphore.wait() // ootab, kuni ressurss muutub saadavaks
// Töö ressursiga
semaphore.signal() // vabastab ressursi
Sellisel viisil aitavad semaforid vältida võistlusolukordi ja tagada õige juurdepääsu jagatud ressurssidele.