Sobes.tech
Junior — Middle

Kunt u uitleggen wat een semaphore is en hoe het wordt gebruikt voor het synchroniseren van processen?

sobes.tech AI

Antwoord van AI

Semafor is een synchronisatie-mechanisme dat wordt gebruikt om de toegang tot een gedeelde bron te beheren in een multithread- of multiprocessomgeving. Het bevat een teller die aangeeft hoeveel threads of processen gelijktijdig toegang kunnen krijgen tot de bron.

Werking principe:

  • Aanvankelijk wordt de teller van de semafor ingesteld op het aantal beschikbare bronnen.
  • Wanneer een thread toegang wil krijgen, roept hij de operatie wait (of acquire) aan, die de teller verlaagt.
  • Als de teller kleiner wordt dan nul, wordt de thread geblokkeerd en wacht op het vrijmaken van de bron.
  • Wanneer de thread de bron vrijmaakt, roept hij signal (of release) aan, die de teller verhoogt en de wachtende threads ontsluit.

Op iOS wordt vaak de klasse DispatchSemaphore uit GCD gebruikt om met semaforen te werken:

let semaphore = DispatchSemaphore(value: 1) // 1 betekent dat de bron beschikbaar is voor één thread

// In de thread:
semaphore.wait()   // wacht tot de bron beschikbaar is
// Werken met de bron
semaphore.signal() // vrijmaken van de bron

Zo helpen semaforen racecondities te voorkomen en zorgen ze voor correcte toegang tot gedeelde bronnen.