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.