Junior — Middle
Czy możesz wyjaśnić, czym jest semafor w kontekście programowania i synchronizacji wątków?
sobes.tech AI
Odpowiedź od AI
Semafor to mechanizm synchronizacji, który jest używany do kontrolowania dostępu wielu wątków do wspólnego zasobu.
Zawiera licznik, który wskazuje, ile wątków może jednocześnie uzyskać dostęp do zasobu. Gdy wątek chce wejść do sekcji krytycznej, próbuje "złapać" semafor:
- Jeśli licznik jest większy od zera, jest on zmniejszany o jeden, a wątek kontynuuje pracę.
- Jeśli licznik jest równy zero, wątek jest blokowany i czeka, aż inny wątek zwolni semafor.
Gdy wątek kończy pracę z zasobem, zwalnia semafor, zwiększając licznik, co pozwala innym wątkom kontynuować.
Przykład użycia semafora w Swift (iOS):
let semaphore = DispatchSemaphore(value: 2) // pozwalamy na jednoczesną pracę 2 wątków
DispatchQueue.global().async {
semaphore.wait() // próba złapania semafora
print("Wątek rozpoczął pracę")
sleep(2) // symulacja pracy
print("Wątek zakończył pracę")
semaphore.signal() // zwalniamy semafor
}
W ten sposób semafor pomaga kontrolować liczbę jednocześnie działających wątków z wspólnym zasobem, zapobiegając warunkom wyścigu i zapewniając poprawne działanie.