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