Junior — Middle
Wie kann man eine sichere Datenaufnahme in einen Kanal aus mehreren Goroutinen ohne Sperren gewährleisten?
sobes.tech KI
Antwort von AI
In Go ist es üblich, Daten sicher in einen Kanal aus mehreren Goroutines zu schreiben, ohne Sperren zu verwenden, indem man einfach den Kanal selbst nutzt, da Kanäle in Go standardmäßig threadsicher sind.
Beispiel:
ch := make(chan int)
// Schreiben in den Kanal aus mehreren Goroutines
for i := 0; i < 5; i++ {
go func(val int) {
ch <- val // sichere Schreiboperation
}(i)
}
// Lesen aus dem Kanal
for i := 0; i < 5; i++ {
fmt.Println(<-ch)
}
Wenn garantiert werden soll, dass das Schreiben nicht blockiert, kann man einen gepufferten Kanal verwenden. Dadurch sind manuelle Sperren nicht notwendig, da der Kanal die Synchronisation übernimmt.