Go語言的互斥鎖(Mutex)使用起來相對簡單?;コ怄i是一種同步原語,用于在并發(fā)編程中保護共享資源免受多個goroutine的訪問。Go語言的sync
包提供了互斥鎖的實現(xiàn)。
以下是一個簡單的示例,展示了如何在Go語言中使用互斥鎖:
package main
import (
"fmt"
"sync"
"time"
)
var (
counter = 0
mutex sync.Mutex
)
func increment() {
mutex.Lock()
counter++
mutex.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
和一個互斥鎖mutex
。increment
函數(shù)用于遞增counter
,但在訪問之前,我們先使用mutex.Lock()
加鎖,訪問完成后使用mutex.Unlock()
解鎖。在main
函數(shù)中,我們創(chuàng)建了1000個goroutine并發(fā)地調(diào)用increment
函數(shù),并使用sync.WaitGroup
等待所有g(shù)oroutine完成。最后,我們打印出counter
的值,它應該是1000。
總之,Go語言的互斥鎖使用起來相對簡單,可以有效地保護共享資源免受并發(fā)訪問的影響。