golang 什么时候用锁


本文摘自php中文网,作者(*-*)浩,侵删。

Go语言包中的 sync 包提供了两种锁类型:sync.Mutex 和 sync.RWMutex。 (推荐学习:go)

Mutex 是最简单的一种锁类型,同时也比较暴力,当一个 goroutine 获得了 Mutex 后,其他 goroutine 就只能乖乖等到这个 goroutine 释放该 Mutex。

RWMutex 相对友好些,是经典的单写多读模型。在读锁占用的情况下,会阻止写,但不阻止读,也就是多个 goroutine 可同时获取读锁(调用 RLock() 方法;

而写锁(调用 Lock() 方法)会阻止任何其他 goroutine(无论读和写)进来,整个锁相当于由该 goroutine 独占。从 RWMutex 的实现看,RWMutex 类型其实组合了 Mutex:

1

2

3

4

5

6

7

type RWMutex struct {

    w Mutex

    writerSem uint32

    readerSem uint32

    readerCount int32

    readerWait int32

}

sync.mutex 加锁后禁止其他地方读或写,这个适用于可能出现的在不同go协程中修改同一个数据

sync.rwmutex 的lock 和 unlock 的使用和sync.mutex类似

sync.rwmutex 的rlock和runlock的使用适用于要读取数据,防止在读取的同时可能出现的别的地方写入,而导致的读取失败

以上就是golang 什么时候用锁的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

go语言的依赖管理

golang sqlx捕捉错误

godoc命令不存在的解决方法

详解golang如何对excel进行处理

web安全学习方法与职业介绍-1

golang (v2)分布式id生成系统,高性能、高可用、易扩展的id生成服务

golang slice检查元素是否存在

[系列] - go-gin-api 路由中间件 - 签名验证(七)

golang交叉编译简述

golang可以调用lua吗?

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...