北京
拉勾教育Go基础系列互斥锁Mutex和读写锁RWMutex用法详述

拉勾教育Go基础系列互斥锁Mutex和读写锁RWMutex用法详述

价格面议2020-12-02 14:34:45

提示:与商家沟通请核实商家资质,交易过程注意核实身份及商品/服务的真实性。

lagoujiaoyu

注册时间:2020-08-27

信息详情

sync.Mutex
拉勾教育Go基础系列互斥锁Mutex和读写锁RWMutex用法详述
拉勾教育Go基础系列互斥锁Mutex和读写锁RWMutex用法详述
拉勾教育Go基础系列互斥锁Mutex和读写锁RWMutex用法详述

Go中使用sync.Mutex类型实现mutex(排他锁、互斥锁)。在源代码的sync/mutex.go文件中,有如下定义:拉勾IT课小编为大家分解

// A Mutex is a mutual exclusion lock.

// The zero value for a Mutex is an unlocked mutex.

//

// A Mutex must not be copied after first use.

type Mutex struct {

state int32

sema uint32

}

这没有任何非凡的地方。和mutex相关的所有事情都是通过sync.Mutex类型的两个方法sync.Lock()和sync.Unlock()函数来完成的,前者用于获取sync.Mutex锁,后者用于释放sync.Mutex锁。sync.Mutex一旦被锁住,其它的Lock()操作就无法再获取它的锁,只有通过Unlock()释放锁之后才能通过Lock()继续获取锁。

也就是说,已有的锁会导致其它申请Lock()操作的goroutine被阻塞,且只有在Unlock()的时候才会解除阻塞。

另外需要注意,sync.Mutex不区分读写锁,只有Lock()与Lock()之间才会导致阻塞的情况,如果在一个地方Lock(),在另一个地方不Lock()而是直接修改或访问共享数据,这对于sync.Mutex类型来说是允许的,因为mutex不会和goroutine进行关联。如果想要区分读、写锁,可以使用sync.RWMutex类型,见后文。

酷易搜提醒您:

1、为了您的资金安全,请选择见面交易,任何要求预付定金、汇款等方式均存在风险,谨防上当受骗!
2、确认收货前请仔细核验产品质量,避免出现以次充好的情况。
3、该信息由酷易搜网用户自行发布,其真实性及合法性由发布人负责,酷易搜网仅引用以供用户参考,详情请阅读酷易搜网免责条款。 查看详情>

该用户其他信息

你可能还喜欢

北京热门公司

北京热门资讯

lagoujiaoyu
×