Sobes.tech
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.