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