Mutex
Mutex结构体
type Mutex struct {
state int32 //表示互斥锁的状态,比如是否被锁定等
sema uint32 //表示信号里,协程阻塞等待的信号量,解锁的协程释放信号量从而唤醒等待信号量的协程
}
- Locked: 表示Mutex是否已被锁定(1表示已经被锁定)
- Woken: 表示是否有协程被唤醒(1已有协程唤醒,正在加锁过程中)
- Starving: 表示Mutex是否处于饥饿状态(1表示饥饿状态,说明有协程阻塞超过1ms)
- Waiter: 表示阻塞等待锁的协程个数,协程解锁时根据此值来判断是否需要释放洗好了.
协程之间抢锁实际上是抢给Locked赋值的权利,能给Locked值置为1,就说明抢锁成功.抢不到的话就阻塞等待Mutex.sema信号量,一旦持有锁的协程解锁,等到的协程就会被依次唤醒.
Mutex只有两个方法:
- Lock()加锁
- Unlock()解锁