[Go] golang互斥鎖mutex


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()
	}
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM