Sobes.tech
Senior

Welche der Liste sind Synchronisationsmittel in Go? Kanäle, sync.WaitGroup, sync.Mutex, sync.Cond?

sobes.tech KI

Antwort von AI

In Go sind alle genannten Mittel — Kanäle (channels), sync.WaitGroup, sync.Mutex und sync.Cond — Synchronisationsmechanismen, dienen jedoch unterschiedlichen Zwecken:

  • Kanäle (channels) — ermöglichen einen sicheren Datenaustausch zwischen Goroutinen und dienen der Synchronisation durch Nachrichtenübertragung.
  • sync.Mutex — Mutex für gegenseitigen Ausschluss, verhindert gleichzeitigen Zugriff auf gemeinsam genutzte Ressourcen.
  • sync.WaitGroup — ermöglicht das Warten auf das Ende einer Gruppe von Goroutinen und synchronisiert diese.
  • sync.Cond — Bedingungsvariable, wird für komplexere Synchronisationen verwendet, wenn Goroutinen auf das Eintreten einer bestimmten Bedingung warten.

Beispiel für die Verwendung von sync.WaitGroup und sync.Mutex:

var mu sync.Mutex
var wg sync.WaitGroup
counter := 0

wg.Add(2)
go func() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}()
go func() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}()
wg.Wait()
fmt.Println("Zähler:", counter)