Senior
Vertel me over het Semaphore-patroon.
sobes.tech AI
Antwoord van AI
Het Semaphore-patroon is een synchronisatie-mechanisme dat het aantal gelijktijdige operaties beperkt of de toegang tot een bron.
In Go kan een semaphore worden geïmplementeerd met behulp van een kanaal, dat het aantal goroutines beperkt dat tegelijkertijd een kritische sectie kan uitvoeren.
Voorbeeld van een eenvoudige semaphore in Go:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
sem := make(chan struct{}, 3) // semaphore met capaciteit 3
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // semafoor verkrijgen
fmt.Printf("Goroutine %d is begonnen met werken\n", id)
time.Sleep(1 * time.Second) // werk simulatie
fmt.Printf("Goroutine %d heeft klaar\n", id)
<-sem // semafoor vrijgeven
}(i)
}
wg.Wait()
}
In dit voorbeeld kunnen niet meer dan drie goroutines gelijktijdig werken. Semaphore is handig om parallelisme te beperken, bijvoorbeeld bij het werken met beperkte bronnen (verbindingen, bestanden, enz.).