Junior — Middle
Unter welchen Bedingungen erfolgt die Sperrung bei der Arbeit mit dem Standard-Datenübertragungskanal?
sobes.tech KI
Antwort von AI
In Go wird der Standard-Datenkanal in folgenden Fällen blockiert:
- Beim Senden eines Werts an den Kanal (
chan <- value), wenn der Kanal keinen Puffer hat oder der Puffer voll ist, wird die sendende Goroutine blockiert, bis ein anderer Thread den Wert liest. - Beim Lesen aus dem Kanal (
value := <- chan), wenn der Kanal leer ist, wird die lesende Goroutine blockiert, bis Daten vorhanden sind.
Daher tritt die Blockierung auf, wenn versucht wird, Daten an einen vollen Kanal zu senden oder aus einem leeren Kanal zu lesen, was die Synchronisation zwischen Goroutinen gewährleistet.
Beispiel:
ch := make(chan int) // Kanal ohne Puffer
// Senden blockiert, bis jemand liest
go func() {
ch <- 42
}()
val := <-ch // Lesen entsperrt das Senden
fmt.Println(val)