Sobes.tech
Junior — Middle

Kā nodrošināt drošu datu ierakstīšanu kanālā no vairākām goroutine'ām bez bloķēšanas?

sobes.tech AI

Atbilde no AI

Go valodā, droši rakstīt datus kanālā no vairākiem gorutīniem bez bloķēšanas parasti ir pietiekami izmantot pašu kanālu, jo kanāli Go ir noklusējuma stūrī droši.

Piemērs:

ch := make(chan int)

// Rakstīšana kanālā no vairākiem gorutīniem
for i := 0; i < 5; i++ {
    go func(val int) {
        ch <- val // droša rakstīšana
    }(i)
}

// Lasīšana no kanāla
for i := 0; i < 5; i++ {
    fmt.Println(<-ch)
}

Ja vēlaties nodrošināt, ka rakstīšana netiks bloķēta, varat izmantot buferētu kanālu. Šādā veidā, manuālas bloķēšanas nav nepieciešamas, jo kanāls nodrošina sinhronizāciju.