Sobes.tech
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ę.