天天看點

Golang 學習 - 互斥鎖

  • 互斥鎖(互斥量)
    • 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 {
    		;
    	}
    }