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.