Sobes.tech
Middle+

Čo ste použili na synchronizáciu v multithreadingu?

sobes.tech AI

Odpoveď od AI

V Go sa bežne používané nasledujúce mechanizmy na synchronizáciu v paralelnom spracovaní (goroutines):

  • Mutex (sync.Mutex) — na vzájomné vylúčenie prístupu ku zdieľaným zdrojom.

  • RWMutex (sync.RWMutex) — na rozdelenie prístupu na čítanie a zápis, umožňuje viacerým čitateľom čítať súčasne, ale blokuje pri zápise.

  • WaitGroup (sync.WaitGroup) — na čakanie na dokončenie skupiny goroutines.

  • Kanál (channels) — na prenos dát a synchronizáciu medzi goroutines, často preferovaný spôsob v Go.

  • Atómové operácie (sync/atomic) — na nízkoúrovňovú synchronizáciu bez zámkov.

Príklad použitia Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

V Go sa často odporúča používať kanály na synchronizáciu, podľa princípu "ne zdieľajte pamäť, zdieľajte kanály".