Junior — Middle
Erklären Sie das Funktionsprinzip des Synchronisationsmechanismus für Goroutines im Kontext der gleichzeitigen Ausführung von Aufgaben.
sobes.tech KI
Antwort von AI
In Go sind Goroutines leichte Threads, die gleichzeitig ausgeführt werden. Zur Synchronisierung der Goroutines werden Mechanismen verwendet, die den Zugriff auf gemeinsame Ressourcen koordinieren und die Ausführung ordnen.
Hauptmechanismen der Synchronisierung:
- Kanäle (channels): ermöglichen die Datenübertragung zwischen Goroutines und gewährleisten die Synchronisation durch Nachrichtenaustausch.
- Mutexes (sync.Mutex): sperren den Zugriff auf geteilte Daten, um Race Conditions zu vermeiden.
- WaitGroup (sync.WaitGroup): ermöglicht das Warten auf das Ende einer Gruppe von Goroutines.
Beispiel mit Kanal:
package main
import (
"fmt"
)
func worker(ch chan int) {
val := <-ch // wartet auf Daten vom Kanal
fmt.Println("Empfangener Wert:", val)
}
func main() {
ch := make(chan int)
go worker(ch)
ch <- 42 // sendet Daten in den Kanal
}
Hier sorgt der Kanal für die Synchronisation: Die Goroutine worker wartet, bis main einen Wert sendet.