理解Go 语言中读写锁 RWMutex
package main
import (
"fmt"
"sync"
)
func main() {
var rwm sync.RWMutex
var count int
increment := func() {
rwm.Lock()
count++
rwm.Unlock()
}
// 注意:以下并发操作可能导致数据竞争和不确定的输出,因此我们使用 go run -race 来检测数据竞争问题。
// 在并发场景下,读写锁保证了写操作对数据的独占访问,而在读操作时,可以允许多个goroutine同时读取数据。
// 写操作
increment()
fmt.Println("After increment:", count) // 输出 After increment: 1
// 读操作
readCount := func() {
rwm.RLock()
fmt.Println("During read:", count) // 输出 During read: 1
rwm.RUnlock()
}
readCount()
}
这段代码演示了如何在Go语言中使用sync.RWMutex
进行读写操作。increment
函数模拟了一个写操作,而readCount
函数模拟了一个读操作。在写操作中,我们使用Lock
和Unlock
方法来保证数据的修改是互斥的。在读操作中,我们使用RLock
和RUnlock
方法来允许多个goroutine同时读取数据,从而提升并发性能。
评论已关闭