Sobes.tech
Назад к вопросам
Middle
5

Как работает sync.RWMutex и когда его использовать?

Компании, где спрашивали
VKVK

Ответ от нейросети

sobes.tech AI

sync.RWMutex в Go — это разновидность мьютекса, который позволяет нескольким горутинам одновременно читать данные (RLock), но блокирует запись (Lock) до тех пор, пока все читатели не отпустят блокировку.

Когда использовать:

  • Если у вас есть данные, которые часто читаются и редко изменяются.
  • Чтобы повысить производительность, позволяя параллельные чтения, но исключая одновременную запись.

Пример:

var mu sync.RWMutex
var data int

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

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

Таким образом, несколько вызовов readData могут выполняться одновременно, но writeData будет ждать, пока все чтения завершатся, и блокировать новые чтения, пока не завершится запись.