#每天一个知识点#
day29
读写锁(RWMutex)
读写锁(RWMutex)是一种特殊类型的锁,它允许多个读操作同时进行,但只允许一个写操作。这种锁机制适用于读操作频繁、写操作较少的场景,可以提高程序的并发性能。RWMutex提供了三个方法:RLock()、RUnlock()和Lock()。RLock()用于获取读锁,允许多个goroutine同时获取读锁,RUnlock()用于释放读锁。Lock()用于获取写锁,只有一个goroutine可以获取写锁,其他goroutine会被阻塞,直到写锁被释放。
下面是一个使用RWMutex的示例:
import (
"fmt"
"sync"
"time"
)
var (
data map[string]string
rwMutex sync.RWMutex
)
func readData(key string) {
rwMutex.RLock()
defer rwMutex.RUnlock()
fmt.Println("Reading data:", data[key])
}
func writeData(key, value string) {
rwMutex.Lock()
defer rwMutex.Unlock()
data[key] = value
fmt.Println("Writing data:", data)
}
func main() {
data = make(map[string]string)
go writeData("key1", "value1")
go readData("key1")
go writeData("key2", "value2")
go readData("key2")
time.Sleep(1 * time.Second)
}
day29
读写锁(RWMutex)
读写锁(RWMutex)是一种特殊类型的锁,它允许多个读操作同时进行,但只允许一个写操作。这种锁机制适用于读操作频繁、写操作较少的场景,可以提高程序的并发性能。RWMutex提供了三个方法:RLock()、RUnlock()和Lock()。RLock()用于获取读锁,允许多个goroutine同时获取读锁,RUnlock()用于释放读锁。Lock()用于获取写锁,只有一个goroutine可以获取写锁,其他goroutine会被阻塞,直到写锁被释放。
下面是一个使用RWMutex的示例:
import (
"fmt"
"sync"
"time"
)
var (
data map[string]string
rwMutex sync.RWMutex
)
func readData(key string) {
rwMutex.RLock()
defer rwMutex.RUnlock()
fmt.Println("Reading data:", data[key])
}
func writeData(key, value string) {
rwMutex.Lock()
defer rwMutex.Unlock()
data[key] = value
fmt.Println("Writing data:", data)
}
func main() {
data = make(map[string]string)
go writeData("key1", "value1")
go readData("key1")
go writeData("key2", "value2")
go readData("key2")
time.Sleep(1 * time.Second)
}
展开
1
1