Sobes.tech
Junior — Middle

Můžete vysvětlit, co je to semafor v kontextu programování a synchronizace vláken?

sobes.tech AI

Odpověď od AI

Semafor je synchronizační mechanismus používaný k řízení přístupu více vláken ke sdílenému zdroji.

Obsahuje čítač, který ukazuje, kolik vláken může současně získat přístup ke zdroji. Když se vlákno chce dostat do kritické sekce, pokusí se "získat" semafor:

  • Pokud je čítač větší než nula, sníží se o jedna a vlákno pokračuje.
  • Pokud je čítač rovný nule, vlákno se zablokuje a čeká, až jiné vlákno uvolní semafor.

Když vlákno dokončí práci se zdrojem, uvolní semafor zvýšením čítače, což umožní dalším vláknům pokračovat.

Příklad použití semaforu ve Swift (iOS):

let semaphore = DispatchSemaphore(value: 2) // umožňuje současně 2 vlákna

DispatchQueue.global().async {
    semaphore.wait() // pokusí se získat semafor
    print("Vlákno začalo pracovat")
    sleep(2) // simulace práce
    print("Vlákno dokončilo práci")
    semaphore.signal() // uvolní semafor
}

Tímto způsobem pomáhá semafor řídit počet vláken pracujících současně se sdíleným zdrojem, předchází závodním podmínkám a zajišťuje správnou funkčnost.