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)
}
Ако трябва да гарантирате, че записът няма да блокира, можете да използвате буфериран канал. По този начин, ръчните блокировки не са необходими, тъй като каналът осигурява синхронизация.