我不确定何时使用RWMutex以及何时使用Mutex。
如果你使用RWMutex代替Mutex,如果你做更多的读取然后写入,你会节省资源吗?
我看到有些人不管他们做什么都会一直使用Mutex,有些人使用RWMutex并运行这些方法:
func (rw *RWMutex) Lock()
func (rw *RWMutex) Unlock()
func (rw *RWMutex) RLock()
func (rw *RWMutex) RUnlock()
而不只是:
func (m *Mutex) Lock()
func (m *Mutex) Unlock()
如果您节省了资源,那么如果您执行更多读取然后写入,那么您应该使用RWMutex是否有很大差异?
答案 0 :(得分:12)
来自the docs(强调我的):
RWMutex是一个读/写互斥锁。 锁定可由任意数量的读取器或单个写入器保存。 RWMutex的零值是未锁定的互斥锁。
换句话说,读者不必彼此等待。他们只需等待持有锁的作家。
因此,sync.RWMutex最适用于大多数读取的数据,与sync.Mutex相比,保存的资源是时间。
答案 1 :(得分:0)
尝试该程序:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var mu sync.RWMutex
go func() {
mu.RLock()
fmt.Println("1", time.Now())
time.Sleep(time.Second * 3)
mu.RUnlock()
}()
go func() {
mu.RLock()
fmt.Println("2", time.Now())
mu.RUnlock()
}()
time.Sleep(time.Second * 4)
}