溫馨提示×

go語言全局變量能線程安全嗎

小樊
94
2024-12-06 06:31:57
欄目: 編程語言

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,確保在同一時間只有一個協程可以訪問和修改它。這樣可以避免數據競爭和不一致的狀態。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女