Junior — Middle
Vai jūs varat izskaidrot semafora darbības principu daudzprocesu programmēšanā?
sobes.tech AI
Atbilde no AI
Semafors ir sinhronizācijas mehānisms daudzšūnu programmēšanā, kas kontrolē piekļuvi kopīgam resursam. Tas satur skaitītāju, kas norāda, cik daudz pavedienu vienlaikus var piekļūt resursam.
Darbības princips:
- Sākotnēji semafora skaitītājs tiek iestatīts uz skaitu, kas ir vienāds ar pieejamo resursu skaitu.
- Kad pavediens vēlas piekļūt, tas izsauc operāciju "wait" (vai "acquire"), kas samazina skaitītāju par 1.
- Ja skaitītājs kļūst mazāks par nulli, pavediens tiek bloķēts un gaida, kamēr cits pavediens atbrīvos resursu.
- Kad pavediens atbrīvo resursu, tas izsauc operāciju "signal" (vai "release"), kas palielina skaitītāju par 1 un atbloķē gaidošos pavedienus.
Piemērs Swift ar DispatchSemaphore:
let semaphore = DispatchSemaphore(value: 2) // ļauj vienlaikus darboties 2 pavedieniem
DispatchQueue.global().async {
semaphore.wait() // mēģinājums piekļūt
print("Pavediens sāka darbu")
sleep(2) // darba simulācija
print("Pavediens pabeidza darbu")
semaphore.signal() // resursa atbrīvošana
}
Tādējādi semafors palīdz ierobežot skaitu pavedienu, kas vienlaikus strādā ar kopīgu resursu, novēršot sacensību apstākļus un nodrošinot datu integritāti.