[Go] golang互斥鎖mutex
阿新 • • 發佈:2019-02-16
變量 只有一個 unlock 允許 println main run don UNC
1.互斥鎖用於在代碼上創建一個臨界區,保證同一時間只有一個goroutine可以執行這個臨界區代碼
2.Lock()和Unlock()定義臨界區
package main import ( "fmt" "runtime" "sync" ) var ( //全局變量 counter int64 //計數信號量 wg sync.WaitGroup //mutex定義一段代碼臨界區 mutex sync.Mutex ) func main() { fmt.Println("hello") //計數加2,等待兩個goroutine wg.Add(2) go incCounter() go incCounter() //主goroutine等待子goroutine結束 wg.Wait() fmt.Println("最終counter值:", counter) } //增加counter的值函數 func incCounter() { //函數結束,減小信號量 defer wg.Done() for count := 0; count < 2; count++ { //創建這個臨界區 //同一時刻只允許一個goroutine進入 mutex.Lock() //使用大括號只是為了讓臨界區看起來更清晰,並不是必須的 { value := counter //強制調度器切換 runtime.Gosched() value++ counter = value } mutex.Unlock() } }
[Go] golang互斥鎖mutex