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)