Junior — Middle
Vai jūs varat izskaidrot, kas ir semafors programmēšanas un pavedienu sinhronizācijas kontekstā?
sobes.tech AI
Atbilde no AI
Semafors ir sinhronizācijas mehānisms, ko izmanto, lai kontrolētu vairāku pavedienu piekļuvi kopīgam resursam.
Tas satur skaitītāju, kas norāda, cik daudz pavedienu vienlaikus var piekļūt resursam. Kad pavediens vēlas ieiet kritiskajā sadaļā, tas mēģina "noķert" semaforu:
- Ja skaitītājs ir lielāks par nulli, tas tiek samazināts par vienu, un pavediens turpina darbu.
- Ja skaitītājs ir nulle, pavediens tiek bloķēts un gaida, kamēr cits pavediens atbrīvos semaforu.
Kad pavediens pabeidz darbu ar resursu, tas atbrīvo semaforu, palielinot skaitītāju, ļaujot citiem pavedieniem turpināt.
Piemērs, kā izmantot semaforu Swift (iOS):
let semaphore = DispatchSemaphore(value: 2) // ļauj vienlaikus darboties 2 pavedieniem
DispatchQueue.global().async {
semaphore.wait() // mēģina noķert semaforu
print("Pavediens sāka darbu")
sleep(2) // darba simulācija
print("Pavediens pabeidza darbu")
semaphore.signal() // atbrīvo semaforu
}
Tādējādi semafors palīdz kontrolēt, cik pavedienu vienlaikus strādā ar kopīgu resursu, novērš sacensību apstākļus un nodrošina pareizu darbību.