Sobes.tech
Junior — Middle

Kunt u het werkingsprincipe van een semafoor in multithread programming uitleggen?

sobes.tech AI

Antwoord van AI

Een semafoor is een synchronisatie-mechanisme in multithread-programmering dat de toegang tot een gedeelde bron controleert. Het bevat een teller die aangeeft hoeveel threads gelijktijdig toegang kunnen krijgen tot de bron.

Werking principe:

  • Aanvankelijk wordt de teller van de semafoor ingesteld op een getal gelijk aan het aantal beschikbare bronnen.
  • Wanneer een thread toegang wil krijgen, roept hij de operatie "wait" (of "acquire") aan, die de teller met 1 verlaagt.
  • Als de teller minder dan nul wordt, wordt de thread geblokkeerd en wacht tot een andere thread de bron vrijmaakt.
  • Wanneer een thread de bron vrijmaakt, roept hij de operatie "signal" (of "release") aan, die de teller met 1 verhoogt en wachtende threads ontgrendelt.

Voorbeeld in Swift met DispatchSemaphore:

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

DispatchQueue.global().async {
    semaphore.wait() // probeert toegang te krijgen
    print("Thread is begonnen met werken")
    sleep(2) // werk simulatie
    print("Thread heeft klaar met werken")
    semaphore.signal() // vrijmaken van de bron
}

Op deze manier helpt de semafoor om het aantal threads dat gelijktijdig met een gedeelde bron werkt te beperken, racecondities te voorkomen en de gegevensintegriteit te waarborgen.