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