Junior — Middle
Vai jūs varētu izskaidrot, kas ir semafors un kā tas tiek izmantots procesu sinhronizācijai?
sobes.tech AI
Atbilde no AI
Semafors ir sinhronizācijas mehānisms, ko izmanto, lai pārvaldītu piekļuvi koplietotam resursam daudzšūnu vai daudzprocesu vidē. Tas satur skaitītāju, kas norāda, cik daudz pavedienu vai procesu var vienlaikus piekļūt resursam.
Darbības princips:
- Sākotnēji semafora skaitītājs tiek iestatīts uz pieejamo resursu skaitu.
- Kad pavediens vēlas piekļūt, tas izsauc operāciju
wait(vaiacquire), kas samazina skaitītāju. - Ja skaitītājs kļūst mazāks par nulli, pavediens tiek bloķēts, gaidot resursa atbrīvošanu.
- Kad pavediens atbrīvo resursu, tas izsauc
signal(vairelease), kas palielina skaitītāju un atbloķē gaidošos pavedienus.
iOS, strādājot ar semaforiem, bieži tiek izmantota DispatchSemaphore klase no GCD:
let semaphore = DispatchSemaphore(value: 1) // 1 nozīmē, ka resursu ir pieejams vienam pavedienam
// Pavedienā:
semaphore.wait() // gaida, kamēr resursu kļūs pieejams
// Darbs ar resursu
semaphore.signal() // atbrīvo resursu
Tādējādi, semafori palīdz novērst sacensību apstākļus un nodrošina pareizu piekļuvi koplietotajiem resursiem.