Sobes.tech
Junior — Middle

Ako zabezpečiť bezpečné zapisovanie údajov do kanála z viacerých gorutín bez použitia zámku?

sobes.tech AI

Odpoveď od AI

V jazyku Go je bežné bezpečne zapisovať dáta do kanála z viacerých gorútin bez použitia zámkov, pretože kanály v Go sú predvolene bezpečné pre vlákna.

Príklad:

ch := make(chan int)

// Zápis do kanála z viacerých gorútin
for i := 0; i < 5; i++ {
    go func(val int) {
        ch <- val // bezpečný zápis
    }(i)
}

// Čítanie z kanála
for i := 0; i < 5; i++ {
    fmt.Println(<-ch)
}

Ak chcete zabezpečiť, že zápis nebude blokovaný, môžete použiť vyrovnávací kanál. Týmto spôsobom nie sú potrebné manuálne zámky, pretože kanál zabezpečuje synchronizáciu.