【Go 互斥锁与读写锁深入浅出】
互斥锁(Mutex)和读写锁(RWMutex)是Go语言中用于控制并发访问的同步原语。以下是它们的简单示例:
互斥锁(Mutex)示例:
package main
import (
"fmt"
"sync"
)
var (
count int
lock sync.Mutex
)
func increment() {
lock.Lock()
defer lock.Unlock()
count++
}
func main() {
for g := 0; g < 10; g++ {
go increment()
}
for g := 0; g < 10; g++ {
go increment()
}
fmt.Scanln() // 等待 goroutines 完成
fmt.Println("Count:", count)
}
读写锁(RWMutex)示例:
package main
import (
"fmt"
"sync"
)
var (
count int
lock sync.RWMutex
)
func readCount() int {
lock.RLock()
defer lock.RUnlock()
return count
}
func updateCount() {
lock.Lock()
defer lock.Unlock()
count++
}
func main() {
for g := 0; g < 10; g++ {
go updateCount()
}
for g := 0; g < 10; g++ {
go readCount()
}
fmt.Scanln() // 等待 goroutines 完成
fmt.Println("Count:", count)
}
互斥锁确保写操作的完全排他性,而读写锁允许多个goroutine同时读取数据,但只有一个写操作可以执行。在设计需要高并发读写的数据结构时,读写锁是一个有效的工具。
评论已关闭