计算机系统应用教程网站

网站首页 > 技术文章 正文

Go中读写锁RWMutex的基本用法 go 读写锁

btikc 2024-10-12 13:20:46 技术文章 42 ℃ 0 评论

在Go中,sync.RWMutex是一个读写锁,它可以控制对共享资源的并发访问。读写锁允许多个读操作同时进行,但只允许一个写操作进行。这可以提高程序的并发性能,因为读操作不会阻塞其他读操作,只有写操作会阻塞其他读写操作。

sync.RWMutex类型有三个方法:

1. func (rw *RWMutex) Lock():获取写锁。如果有其他协程已经持有了写锁或读锁,那么当前协程会阻塞,直到其他协程释放锁。

2. func (rw *RWMutex) Unlock():释放写锁。如果当前协程没有持有写锁,该方法会引发 panic。

3. func (rw *RWMutex) RLock(): 获取读锁。如果有其他协程持有写锁,那么当前协程会阻塞,直到其他协程释放锁。

4. func (rw *RWMutex) RUnlock(): 释放读锁。如果当前协程没有持有读锁,该方法会引发 panic。

使用sync.RWMutex的一个例子:

package main

import (
    "fmt"
    "sync"
)

var (
    count int
    lock sync.RWMutex
)

func main() {
    for i := 0; i < 10; i++ {
        go read()
    }
    for i := 0; i < 5; i++ {
        go write()
    }
    fmt.Scanln()
}

func read() {
    for {
        lock.RLock()
        fmt.Println(count)
        lock.RUnlock()
    }
}

func write() {
    for {
        lock.Lock()
        count++
        lock.Unlock()
    }
}

在这个例子中,我们创建了一个计数器`count`和一个读写锁`lock`。我们创建了10个读协程和5个写协程。读协程在循环中获取读锁并打印计数器的值,写协程在循环中获取写锁并增加计数器的值。

运行程序后,你会看到读协程可以同时访问计数器,而写协程会阻塞其他协程的访问,直到它们释放锁。这个例子展示了如何使用`sync.RWMutex`控制对共享资源的并发访问。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表