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.