Sobes.tech
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.