Sobes.tech
Junior — Middle

Kuidas tagada andmete turvaline kirjutamine kanalisse mitme goroutine'i poolt ilma lukustust kasutamata?

sobes.tech AI

Vastus AI-lt

Go keeles on tavaline kirjutada andmeid turvaliselt kanalisse mitme goroutine'i poolt ilma lukke kasutamata, kuna kanalid Go-s on vaikimisi niivõrd turvalised mitme lõime jaoks.

Näide:

ch := make(chan int)

// Kirjutamine kanalisse mitme goroutine'i poolt
for i := 0; i < 5; i++ {
    go func(val int) {
        ch <- val // turvaline kirjutamine
    }(i)
}

// Lugemine kanalist
for i := 0; i < 5; i++ {
    fmt.Println(<-ch)
}

Kui soovite tagada, et kirjutamine ei blokeeru, saate kasutada buferdatud kanalit. Sel juhul ei ole vaja käsitsi lukke, kuna kanal tagab sünkroniseerimise.