锁
go中的锁分为两类:
- 互斥锁Sync.Mutex:特别的如果要实现对象锁的话,可以在定义该对象的结构体时封装一个互斥锁成员,比如
type struct Resource{
resource int
lock sync.mutex
}
- 读写锁 sync.RWMutex:读-写、写-读 以及写-写操作互斥,但读-读操作可以并发执行,操作如下:
func (*RWMutex) Lock() // 写锁
func (*RWMutex) Unlock() // 解写锁
func (*RWMutex) RLock() //读锁
func (*RWMutex) RUnlock() //解读锁
条件变量Condition
sync.Cond类型即是Go中的条件变量,该类型内部包含一个锁接口。条件变量通常与锁配合使用。
创建条件变量的方式(调用sync包下的func NewCond(l locker) *Cond {}
比如:
var cond = sync.NewCond(&sync.Mutex{}) // 条件变量必须传入一个锁(condition是基于互斥锁的,所以必须配套使用,go直接帮它们两合二为一了)
*sync.Cond类型(这是个指针类型)有三个方法:
Wait(): //该方法会阻塞当前协程同时释放所