您的位置:宽带测速网 > 编程知识 > Go语言中的互斥锁和读写锁怎么使用

Go语言中的互斥锁和读写锁怎么使用

2025-06-25 15:43来源:互联网 [ ]

在Go语言中,可以使用sync包中的Mutex类型来实现互斥锁,使用sync包中的RWMutex类型来实现读写锁。下面是它们的基本用法示例:

    互斥锁(Mutex):
package mainimport ("fmt""sync")var mutex sync.Mutexvar count intfunc increment() {mutex.Lock()defer mutex.Unlock()count++}func main() {for i := 0; i < 10; i++ {go increment()}// 等待所有goroutine执行完毕mutex.Lock()defer mutex.Unlock()fmt.Println(count)}
    读写锁(RWMutex):
package mainimport ("fmt""sync")var rwMutex sync.RWMutexvar data map[string]stringfunc readData(key string) {rwMutex.RLock()defer rwMutex.RUnlock()fmt.Println(data[key])}func writeData(key, value string) {rwMutex.Lock()defer rwMutex.Unlock()data[key] = value}func main() {data = make(map[string]string)writeData("key1", "value1")for i := 0; i < 10; i++ {go readData("key1")}// 等待所有goroutine执行完毕rwMutex.Lock()defer rwMutex.Unlock()for k, v := range data {fmt.Println(k, v)}}

在使用互斥锁和读写锁时,需要注意以下几点:

互斥锁适用于读写互斥的情况,读写锁适用于读多写少的情况。对于互斥锁,使用Lock()方法获取锁,使用Unlock()方法释放锁。对于读写锁,使用RLock()方法获取读锁,使用RUnlock()方法释放读锁;使用Lock()方法获取写锁,使用Unlock()方法释放写锁。