Sobes.tech
Senior

Milliseid sünkronsusprimitiive teate?

sobes.tech AI

Vastus AI-lt

Go keeles on mitu peamist sünkroniseerimise primitiivi, mis võimaldavad hallata konkurentsivõimelist juurdepääsu ressurssidele:

  • Mutex (sync.Mutex) — tagab vastastikuse välistamise, blokeerides juurdepääsu kriitilisele sektsioonile.
  • RWMutex (sync.RWMutex) — laiendatud mutex, mis võimaldab mitmel lugejal samaaegselt lugeda, kuid blokeerib kirjutamise.
  • WaitGroup (sync.WaitGroup) — võimaldab oodata, kuni goroutine'ide grupp lõpetab.
  • Cond (sync.Cond) — tingimusmuutuja, mis teavitab goroutine'e sündmuse toimumisest.
  • Aatomilised operatsioonid (sync/atomic) — madala taseme operatsioonid, mis teostavad atomilist lugemist ja kirjutamist muutujatele.

Lisaks kasutatakse Go-s laialdaselt kanaleid (channels), mis võimaldavad goroutine'e sünkroniseerida ja andmeid nende vahel edastada ilma mutex'eid kasutamata.

Mutex näide:

var mu sync.Mutex
var counter int

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

WaitGroup näide:

var wg sync.WaitGroup
wg.Add(2)
go func() {
    defer wg.Done()
    // töö
}()
go func() {
    defer wg.Done()
    // töö
}()
wg.Wait()