golang_锁: sync.Mutex互斥锁的用法介绍

版权声明:版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/weixin_43851310/article/details/87890645

sync.Mutex 互斥锁

type Mutex struct {
    // 包含隐藏或非导出字段
}

Mutex是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。Mutex类型的锁和线程无关,可以由不同的线程加锁和解锁。

Lock

func (m *Mutex) Lock()

Lock方法锁住m,如果m已经加锁,则阻塞直到m解锁。

Unlock

func (m *Mutex) Unlock()

Unlock方法解锁m,如果m未加锁会导致运行时错误。锁和线程无关,可以由不同的线程加锁和解锁。

互斥锁相互排斥,谁抢到锁谁执行.
在这里插入图片描述

场景:

var mutex sync.Mutex				//互斥锁
func printer(str string){
	mutex.Lock()				//加锁
	defer mutex.Unlock()		//解锁
	for _,ch:=range str{
		fmt.Printf("%c",ch)
		time.Sleep(time.Millisecond*300)
	}
}
func user1(){
	printer("hello ")
}
func user2(){
	printer("world")
}
func main() {
	go user1()
	go user2()
	for  {
		;
	}
}

总结:
​ var lock sync.Mutex //声明一个互斥锁
​ lock.Lock() //加锁
​ lock.Unlock() //解锁

猜你喜欢

转载自blog.csdn.net/weixin_43851310/article/details/87890645