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