package main import ( "fmt" "sync" "time" ) var Mutex sync.Mutex func Printer(s string) { //锁定 Mutex.Lock() for _, data := range s { fmt.Printf("%c ", data) } fmt.Println("") //解锁 defer Mutex.Unlock() } func main() { //创建协程 go Printer("hello") go Printer("world") time.Sleep(time.Second * 2) }
互斥锁是传统并发编程对共享资源进行访问控制的主要手段,它由标准库sync中的Mutex结构体类型表示。sync.Mutex类型只有两个公开的指针方法,Lock和Unlock。Lock锁定当前的共享资源,Unlock进行解锁。
在使用互斥锁时,一定要注意:对资源操作完成后,一定要解锁,否则会出现流程执行异常,死锁等问题。通常借助defer。锁定后,立即使用defer语句保证互斥锁及时解锁。