Sobes.tech
Back to questions
Middle
4

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

Companies where asked
VKVK

Answer from AI

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 будет ждать, пока все чтения завершатся, и блокировать новые чтения, пока не завершится запись.