Sobes.tech
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.).