Sobes.tech
Junior — Middle

Milyen műveletek történnek, amikor két goroutine egyidejűleg ír egy csatornába?

sobes.tech MI

Válasz az MI-től

Go-ban, amikor két goroutine egyidejűleg ír egy csatornába, a szinkronizáció a csatornán keresztül történik. A csatorna garantálja, hogy az írás és az olvasás atomikus és szekvenciális módon történik.

Ha két goroutine egyszerre próbál írni a csatornába, az egyik blokkolva lesz, amíg a másik be nem fejezi az írást. Így az írások nem keverednek össze és nem vesznek el — minden írás sorrendben kerül a csatornába.

Példa:

ch := make(chan int)

// Goroutine 1
go func() {
    ch <- 1 // írás a csatornába
}()

// Goroutine 2
go func() {
    ch <- 2 // írás a csatornába
}()

// Olvasás a csatornából
fmt.Println(<-ch)
fmt.Println(<-ch)

Ebben a példában mindkét írás helyesen kerül a csatornába, a sorrend változhat, de az adatok nem vesznek el vagy keverednek össze.

Milyen műveletek történnek, amikor két goroutine… - sobes.tech