1. 程式人生 > >[Go] golang互斥鎖mutex

[Go] golang互斥鎖mutex

變量 只有一個 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