Sobes.tech
Junior — Middle

Mi a különbség a standard mutex használata és egy olvasási és írási lehetőséggel rendelkező (RWMutex) mutex használata között?

sobes.tech MI

Válasz az MI-től

A szokásos mutex (sync.Mutex) a Go-ban kizárólagos hozzáférést biztosít egy erőforráshoz: minden pillanatban csak egy goroutine szerezheti meg a mutexet, a többi vár.

Az olvasási és írási lehetőséggel rendelkező (sync.RWMutex) mutex lehetővé teszi:

  • Több goroutine egyidejűleg szerezheti meg a mutexet olvasásra (RLock), ha nincs író.
  • Csak egy goroutine szerezheti meg a mutexet írásra (Lock), ezzel blokkolva minden olvasót és más írókat.

Ez növeli a teljesítményt olyan forgatókönyvekben, ahol az olvasási műveletek sokkal gyakoribbak, mint az írások, mivel az olvasások nem blokkolják egymást.

Példa:

var mu sync.RWMutex
var data int

// Olvasás
mu.RLock()
fmt.Println(data)
mu.RUnlock()

// Írás
mu.Lock()
data = 42
mu.Unlock()

Ha egy normál Mutex-t használunk, akkor még az olvasások is blokkolják egymást, ami csökkenti a párhuzamosságot.