MST

星途 面试题库

面试题:Go语言中RWMutex读写锁的基本使用场景

在Go语言中,简述RWMutex读写锁适用于哪些场景?请举例说明在一个简单的结构体数据读取和写入场景下,如何正确使用RWMutex来保证数据的一致性和并发安全。
26.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

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进行写锁定,以确保写操作的独占性,从而保证数据的一致性和并发安全。