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 reflect

【gocn酷go推荐】go程序配置利器-viper库

golang与mongodb

golang四舍五入保留两位小数

golang基础数据类型-布尔和字符

golang常量和变量的区别

2.golang 操作elasticsearch-7

手撸golang 行为型设计模式 状态模式

go语言基础之数组

golang如何接收前端的参数

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




打赏

取消

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

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

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

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

评论

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