Sobes.tech
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õi acquire), 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õi release), 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.