互斥鎖(互斥量) - A、B go 程共同通路共享資料,由于 CPU 排程機制,需要對共享資料通路順序加以限定(同步)。
- 建立 mutex (互斥鎖),通路共享資料之前,加鎖;通路結束,解鎖。
- 在 A go 程加鎖期間,B go 程加鎖會失敗。(阻塞)
- 直至 A go 程解鎖後,B go 程才能從阻塞處恢複執行。
// 建立一個互斥鎖,建立的互斥鎖狀态為 0 ,表示未加鎖。鎖隻有一把。
var mutex sync.Mutex
func printer(str string) {
// 通路共享資料之前,加鎖
mutex.Lock()
for _, ch := range str {
fmt.Printf("%c", ch)
time.Sleep(time.Millisecond * 200)
}
// 通路共享資料結束,解鎖
mutex.Unlock()
}
func person1() {
printer("hello")
}
func person2() {
printer("world")
}
func main() {
go person1()
go person2()
for {
;
}
}