Junior — Middle
Akcie, ktoré sa vykonávajú pri súčasnom zápise do kanála dvoma gorutinami?
sobes.tech AI
Odpoveď od AI
V jazyku Go, keď dve gorutiny zapisujú súčasne do kanála, synchronizácia prebieha cez samotný kanál. Kanál zabezpečuje, že zápis a čítanie prebiehajú atomárne a sekvenčne.
Ak sa dve gorutiny pokúsia zapisovať do kanála súčasne, jedna z nich bude zablokovaná, kým druhá nedokončí zápis. Týmto spôsobom sa zápisy nemiešajú a nezmiznú — každý zápis vstupuje do kanála v poradí.
Príklad:
ch := make(chan int)
// Gorutina 1
go func() {
ch <- 1 // zápis do kanála
}()
// Gorutina 2
go func() {
ch <- 2 // zápis do kanála
}()
// Čítanie z kanála
fmt.Println(<-ch)
fmt.Println(<-ch)
V tomto príklade budú oba zápisy správne umiestnené do kanála, poradie môže byť ľubovoľné, ale dáta nezmiznú a nezamiešajú sa.