Junior — Middle
Wat is de functie van het semafoormechanisme in multithreaded programmeren?
sobes.tech AI
Antwoord van AI
Een semafor in multithread programming wordt gebruikt om toegang tot gedeelde bronnen te beheren, door het aantal threads dat tegelijkertijd die bron kan gebruiken te beperken. Het houdt een teller bij die afneemt bij het verkrijgen van de bron en toeneemt bij het vrijgeven ervan. Als de teller nul is, worden nieuwe threads geblokkeerd totdat de bron wordt vrijgegeven.
Voorbeeld in Go met gebruik van een kanaal als semafor:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
sem := make(chan struct{}, 3) // semafor met maximale teller 3
for i := 0; i < 10; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // verkrijgen van de bron
fmt.Printf("Goroutine %d is begonnen\n", id)
// werk simulatie
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d heeft gewerkt\n", id)
<-sem // vrijgeven van de bron
}(i)
}
wg.Wait()
}
Op deze manier helpt de semafor om gelijktijdige toegang te controleren en racecondities en overbelasting van bronnen te voorkomen.