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語句保證互斥鎖及時解鎖。