Junior — Middle
Engedélyezett több goroutine-nak egyszerre üzenetet küldeni egy csatornára?
sobes.tech MI
Válasz az MI-től
Igen, a Go-ban megengedett, hogy több goroutine egyidejűleg üzeneteket küldjön egy csatornára. A csatornák a Go-ban szálbiztosak, és szinkronizálást biztosítanak a goroutine-ok között.
Fontos azonban megjegyezni:
- Ha több goroutine ír ugyanabba a csatornába, és senki sem olvassa, az blokkolást eredményez.
- Ha a csatorna pufferelt, az írások csak akkor blokkolódnak, amikor a puffer megtelik.
- Óvatosan kell kezelni a csatorna bezárását: csak a küldő zárhatja be, és csak akkor, amikor biztos benne, hogy több írás nem lesz.
Példa:
ch := make(chan int)
// Több goroutine indítása, amelyek adatokat küldenek a csatornára
for i := 0; i < 3; i++ {
go func(id int) {
ch <- id
}(i)
}
// Olvasás a csatornából
for i := 0; i < 3; i++ {
fmt.Println(<-ch)
}
Így a több goroutine által történő egyidejű küldés a csatornára a Go-ban szabványos gyakorlat.