Sobes.tech
Junior — Middle

Was ist die Funktion des Semaphor-Mechanismus in der Multithread-Programmierung?

sobes.tech KI

Antwort von AI

Ein Semaphor in der Multithread-Programmierung wird verwendet, um den Zugriff auf gemeinsame Ressourcen zu steuern, indem die Anzahl der Threads begrenzt wird, die diese Ressource gleichzeitig nutzen können. Es hält einen Zähler, der bei der Ressourcenerfassung verringert und bei Freigabe erhöht wird. Wenn der Zähler null ist, werden neue Threads blockiert, bis die Ressource freigegeben wird.

Beispiel in Go mit Verwendung eines Kanals als Semaphor:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    sem := make(chan struct{}, 3) // Semaphor mit maximaler Zählung 3

    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(id int) {
            defer wg.Done()
            sem <- struct{}{} // Ressource ergreifen
            fmt.Printf("Goroutine %d hat mit der Arbeit begonnen\n", id)
            // Arbeit simulieren
            // time.Sleep(time.Second)
            fmt.Printf("Goroutine %d hat die Arbeit beendet\n", id)
            <-sem // Ressource freigeben
        }(i)
    }

    wg.Wait()
}

Auf diese Weise hilft das Semaphor, den gleichzeitigen Zugriff zu kontrollieren und Rennbedingungen sowie Ressourcenüberlastung zu verhindern.