面试题答案
一键面试RWMutex读写锁适用场景
RWMutex读写锁适用于读操作远多于写操作的场景。因为读操作之间不会相互影响数据一致性,所以可以允许多个读操作同时进行,而写操作会改变数据,需要独占访问,以保证数据一致性。例如在缓存系统中,大量的读请求去获取缓存数据,偶尔会有写请求来更新缓存,这种场景就非常适合使用RWMutex。
简单结构体数据读取和写入场景下使用RWMutex示例
package main
import (
"fmt"
"sync"
)
// 定义一个简单结构体
type Data struct {
value int
mu sync.RWMutex
}
// 读取数据方法
func (d *Data) Read() int {
d.mu.RLock()
defer d.mu.RUnlock()
return d.value
}
// 写入数据方法
func (d *Data) Write(v int) {
d.mu.Lock()
defer d.mu.Unlock()
d.value = v
}
在上述代码中,Data
结构体包含一个int
类型的value
字段和一个sync.RWMutex
类型的mu
字段。Read
方法用于读取数据,在读取前使用RLock
进行读锁定,这样可以允许多个读操作同时进行。Write
方法用于写入数据,在写入前使用Lock
进行写锁定,以确保写操作的独占性,从而保证数据的一致性和并发安全。