Sobes.tech
Junior — Middle

Koje vrste međusobnih isključivanja (Mutex) su implementirane u standardnoj biblioteci Go?

sobes.tech АИ

Одговор од АИ

U standardnoj biblioteci Go implementiran je glavni tip međusobnog isključivanja: sync.Mutex. To je jednostavan mutex koji obezbeđuje zaključavanje i otključavanje za zaštitu kritičnih sekcija koda od istovremenog pristupa.

Pored toga, postoji sync.RWMutex — proširena verzija mutexa koja omogućava više čitalaca da istovremeno drže zaključavanje, ali zapis je blokiran isključivo.

Primer korišćenja sync.Mutex:

var mu sync.Mutex
var counter int

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

I primer sa 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
}