Sobes.tech
Junior — Middle

Стандарттык муаттекс колдонуу менен окуу жана жазуу мүмкүнчүлүгү бар (RWMutex) муаттекс колдонуу арасы кандай айырма бар?

sobes.tech AI

AIден жооп

Go тилиндеги стандарттык Mutex (sync.Mutex) ресурска эксклюзивдүү кирүүгө кепилдик берет: ар бир учурда гана бир горутина mutexти алат, калгандары күтүшөт.

Окуу жана жазуу мүмкүнчүлүгү бар (sync.RWMutex) mutex төмөнкүлөрдү камсыздайт:

  • Бир нече горутин бир убакта mutexти окуу үчүн (RLock) алса болот, эгер жазуучу жок болсо.
  • Жай гана бир горутина mutexти жазуу үчүн (Lock) алса болот, ал бардык окуучуларды жана башка жазуучуларды блоктойт.

Бул сценарийлерде, окуу операциялары жазуу операцияларынан көп болсо, натыйжалуулук өсөт, анткени окуулар бири-бирин блоктогон эмес.

Мисал:

var mu sync.RWMutex
var data int

// Окуу
mu.RLock()
fmt.Println(data)
mu.RUnlock()

// Жазуу
mu.Lock()
data = 42
mu.Unlock()

Эгер жөнөкөй Mutex колдонсоңуз, даже окуулар бири-бирин блоктоп, параллелизм азаяр эле.