Sobes.tech
Junior — Middle

Kādi savstarpējās izslēgšanas (Mutex) veidi ir īstenoti Go standarta bibliotēkā?

sobes.tech AI

Atbilde no AI

Standarta bibliotēkā Go ir īstenots galvenais savstarpējās izslēgšanas tips: sync.Mutex. Tas ir vienkāršs mutex, kas nodrošina bloķēšanu un atbloķēšanu, lai aizsargātu kritiskās koda sekcijas no vienlaicīgas piekļuves.

Turklāt ir sync.RWMutex — paplašināta mutex versija, kas ļauj vairākiem lasītājiem vienlaicīgi turēt bloķējumu, bet rakstīšana tiek bloķēta ekskluzīvi.

sync.Mutex piemērs:

var mu sync.Mutex
var counter int

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

Un piemērs ar sync.RWMutex:

var rwMu sync.RWMutex
var data int

func readData() int {
    rwMu.RLock()
    defer rwMu.RUnlock()
    return data
}

func writeData(val int) {
    rwMu.Lock()
    defer rwMu.Unlock()
    data = val
}