Junior — Middle
Jak zapewnić bezpieczne zapisywanie danych do kanału z wielu gorutyn bez użycia blokady?
sobes.tech AI
Odpowiedź od AI
W Go, aby bezpiecznie zapisywać dane do kanału z wielu gorutyn bez użycia blokad, zazwyczaj wystarczy użyć samego kanału, ponieważ kanały w Go są domyślnie bezpieczne dla wątków.
Przykład:
ch := make(chan int)
// Zapis do kanału z wielu gorutyn
for i := 0; i < 5; i++ {
go func(val int) {
ch <- val // bezpieczny zapis
}(i)
}
// Odczyt z kanału
for i := 0; i < 5; i++ {
fmt.Println(<-ch)
}
Jeśli chcesz zagwarantować, że zapis nie zostanie zablokowany, możesz użyć kanału z buforem. W ten sposób nie są potrzebne ręczne blokady, ponieważ kanał zapewnia synchronizację.