Sobes.tech
Junior — Middle

Kun je uitleggen wat een semaphore is in de context van programmeren en thread-synchronisatie?

sobes.tech AI

Antwoord van AI

Een semafoor is een synchronisatie-mechanisme dat wordt gebruikt om de toegang van meerdere threads tot een gedeelde bron te regelen.

Het bevat een teller die aangeeft hoeveel threads gelijktijdig toegang kunnen krijgen tot de bron. Wanneer een thread de kritieke sectie wil betreden, probeert hij de "semfoor" te "vangen":

  • Als de teller groter is dan nul, wordt deze met één verlaagd en gaat de thread verder.
  • Als de teller nul is, wordt de thread geblokkeerd en wacht tot een andere thread de semfoor vrijmaakt.

Wanneer een thread klaar is met het gebruik van de bron, geeft hij de semfoor vrij door de teller te verhogen, zodat andere threads verder kunnen.

Voorbeeld van het gebruik van een semfoor in Swift (iOS):

let semaphore = DispatchSemaphore(value: 2) // staan toe dat 2 threads gelijktijdig werken

DispatchQueue.global().async {
    semaphore.wait() // probeert de semfoor te vangen
    print("Thread is begonnen")
    sleep(2) // simulatie van werk
    print("Thread is klaar")
    semaphore.signal() // geeft de semfoor vrij
}

Op deze manier helpt de semfoor om het aantal gelijktijdige threads die werken met een gedeelde bron te controleren, racecondities te voorkomen en de correcte werking te waarborgen.