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() //解锁