Senior
Ako synchronizovať prístup viacerých gorútin k spoločnému objektu na halde?
sobes.tech AI
Odpoveď od AI
Na synchronizáciu prístupu viacerých gorútín k spoločnému objektu v Go sa zvyčajne používajú mechanizmy z balíka sync:
- Mutex (
sync.Mutex) — blokuje prístup ku zdroju, umožňujúc jednej gorutíne pracovať s objektom, zatiaľ čo ostatné čakajú. - RWMutex (
sync.RWMutex) — umožňuje viacerým gorutínam čítať objekt súčasne, ale blokuje zápis, ak niekto zapisuje.
Príklad s sync.Mutex:
import (
"sync"
)
type SafeCounter struct {
mu sync.Mutex
count int
}
func (c *SafeCounter) Inc() {
c.mu.Lock()
defer c.mu.Unlock()
c.count++
}
func (c *SafeCounter) Value() int {
c.mu.Lock()
defer c.mu.Unlock()
return c.count
}
Týmto spôsobom gorutina pred prístupom ku zdieľanému objektu zamkne mutex a po dokončení ho odomkne. Týmto sa predchádza závodným podmienkam a zabezpečuje správnu prácu so zdieľanými dátami.