Sobes.tech
Junior — Middle

Как да осигурим безопасно записване на данни в канал от няколко горутини без използване на блокировка?

sobes.tech AI

Отговор от AI

В Go, за безопасно записване на данни в канал от няколко горутини без използване на блокировки, обикновено е достатъчно да използвате самия канал, тъй като каналите в Go са по подразбиране безопасни за конкуренция.

Пример:

ch := make(chan int)

// Запис в канал от няколко горутини
for i := 0; i < 5; i++ {
    go func(val int) {
        ch <- val // безопасен запис
    }(i)
}

// Четене от канала
for i := 0; i < 5; i++ {
    fmt.Println(<-ch)
}

Ако трябва да гарантирате, че записът няма да блокира, можете да използвате буфериран канал. По този начин, ръчните блокировки не са необходими, тъй като каналът осигурява синхронизация.