Sobes.tech
Senior

Какво е Mutex и RWMutex? Как се различават?

sobes.tech AI

Отговор от AI

Mutex (в Go — sync.Mutex) е примитив за синхронизация, който осигурява изключителен достъп до ресурс. Когато една горутина го захване, други горутини, които се опитват да го захванат, се блокират, докато не бъде освободен.

RWMutex (sync.RWMutex) е разширение на Mutex, което позволява разделяне на достъпа за четене и писане. Позволява на няколко горутини да четат данни едновременно (RLock), но писането (Lock) изисква изключителен достъп и блокира всички читатели и писатели.

Разлики:

  • Mutex блокира всички, които се опитват да получат достъп, докато е зает.
  • RWMutex позволява на множество читатели да работят паралелно, но писането блокира всички.

Пример:

var mu sync.RWMutex
var data int

// Четене
mu.RLock()
fmt.Println(data)
mu.RUnlock()

// Писане
mu.Lock()
data = 42
mu.Unlock()