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


在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()方法释放写锁。


上一篇:Fortran语法结构是怎样的

下一篇:Fortran中的模块怎么定义和使用


go语言
Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器