在Go語言中,互斥鎖(Mutex)是一種用于保護(hù)共享資源的同步原語。它可以幫助你在多個goroutine之間實現(xiàn)互斥訪問。要正確使用Go語言的互斥鎖,請遵循以下步驟:
import "sync"
var mu sync.Mutex
mu.Lock()
加鎖:mu.Lock()
// 訪問共享資源的代碼
mu.Unlock()
解鎖:// 訪問共享資源的代碼
mu.Unlock()
這是一個簡單的示例,展示了如何使用互斥鎖保護(hù)共享資源:
package main
import (
"fmt"
"sync"
)
var (
counter = 0
mu sync.Mutex
)
func increment() {
mu.Lock()
counter++
mu.Unlock()
}
func main() {
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
defer wg.Done()
increment()
}()
}
wg.Wait()
fmt.Println("Counter:", counter)
}
在這個示例中,我們有一個名為counter
的共享資源和一個名為mu
的互斥鎖。我們創(chuàng)建了一個名為increment
的函數(shù),該函數(shù)在訪問counter
之前加鎖,并在訪問完成后解鎖。在main
函數(shù)中,我們啟動了1000個goroutine并發(fā)地調(diào)用increment
函數(shù),并使用sync.WaitGroup
等待所有g(shù)oroutine完成。最后,我們打印出counter
的值,它應(yīng)該是1000。
注意:在使用互斥鎖時,請確保在訪問共享資源之前加鎖,并在訪問完成后解鎖。如果忘記解鎖,可能會導(dǎo)致死鎖。為了避免這種情況,可以使用defer
語句在函數(shù)返回時自動解鎖:
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}