Junior — Middle
Hogyan biztosítható az adatok biztonságos írása egy csatornába több goroutine-ból anélkül, hogy zárolást használnánk?
sobes.tech MI
Válasz az MI-től
Go nyelven, több goroutine-ból biztonságosan írni adatokat egy csatornába blokkolások nélkül általában elég a csatornát magát használni, mivel a csatornák alapértelmezés szerint szálbiztosak.
Példa:
ch := make(chan int)
// Írás több goroutine-ból a csatornába
for i := 0; i < 5; i++ {
go func(val int) {
ch <- val // biztonságos írás
}(i)
}
// Olvasás a csatornából
for i := 0; i < 5; i++ {
fmt.Println(<-ch)
}
Ha garantálni szeretnéd, hogy az írás nem blokkolódik, használhatsz pufferelt csatornát. Így nem szükséges manuális zárolás, mivel a csatorna szinkronizálást biztosít.