在 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)