Go 語言的全局變量本身并不是線程安全的。在 Go 語言中,全局變量的訪問和修改可能會導致數據競爭(data race)和不一致的狀態。為了確保線程安全,你需要使用同步機制,如互斥鎖(sync.Mutex)或讀寫鎖(sync.RWMutex)等。
例如,使用互斥鎖保護全局變量:
package main
import (
"fmt"
"sync"
)
var globalVar int
var mu sync.Mutex
func main() {
wg := sync.WaitGroup{}
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
mu.Lock()
globalVar++
mu.Unlock()
}()
}
wg.Wait()
fmt.Println("Global variable:", globalVar)
}
在這個例子中,我們使用 sync.Mutex
保護全局變量 globalVar
,確保在同一時間只有一個協程可以訪問和修改它。這樣可以避免數據競爭和不一致的狀態。