在 Go 语言里通过 Mutex实现互斥锁
Mutex接口定义
type Locker interface {
Lock() //加锁
Unlock() //释放锁
}
Mutex原理
1、原理图说明
2、只有一个协程在抢锁
3、协程解锁
4、协程1加锁后释放,协程2抢锁成功
以下是通过Mutex实现的加锁
var lock sync.Mutex
//对i初始是0
var i int = 0
func add() {
//等同于wg.add(-1)
defer wg.Done()
//加锁
lock.Lock()
i += 1
fmt.Printf("add:%v \n", i)
time.Sleep(time.Microsecond * 5)
//释放互斥锁
lock.Unlock()
}
运行一下
如果不加锁,那么结果很可能不是0