golang的锁

一、为什么需要锁

举例:有一个变量4,有两个协程对这个变量执行+1操作。如果没有锁,那么这两个协程可能同时读,结果都是读到4去执行+1操作,最后的结果是5。

锁的作用:在并发的情况下,多个线程或协程同时去修改一个变量。使用锁能保证在某一时间点内,只有一个协程或线程修改这一变量。

其实就是抢锁,抢到锁的才能进行操作。

二、互斥锁 Mutex

互斥锁有两个方法:加锁、解锁。

一个互斥锁只能同时被一个 goroutine 锁定,其它 goroutine 将阻塞直到互斥锁被解锁(重新争抢对互斥锁的锁定)。

func (m *Mutex) Lock()
func (m *Mutex) Unlock()

三、读写锁 RWMutex

读写锁有四个方法:读的加锁、解锁,写的加锁、解锁。

//写操作的锁定和解锁
func (*RWMutex) Lock
func (*RWMutex) Unlock

//读操作的锁定和解锁
func (*RWMutex) Rlock
func (*RWMutex) RUnlock

当有一个写锁定时,新的写锁定与读锁定都将阻塞直到写解锁。

当有一个读锁定时,新的读锁定可以继续,新的写锁定将等待所有读锁定解锁之后才能够进行写锁定。(读、写互斥。可以有多个读锁,但只能有一个写锁。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值