package main // go 攜程共享 數據 // 加鎖解鎖操做 // 同步鎖 import ( "sync" "fmt" ) // 建立Once結構 var once = sync.Once{} func computed(data *int, lock *sync.Mutex) { once.Do(Echo) // 全局惟一操做 lock.Lock() // 加鎖霸佔數據 *data++ fmt.Println(*data) lock.Unlock() // 解鎖讓出數據 } func Echo() { fmt.Println("全局惟一操做") } func main() { var data int = 0 lock := &sync.Mutex{} for i := 0; i < 10; i++ { // 啓動10個攜程 go computed(&data, lock) // 併發中只執行一次 Echo 函數 once.Do(Echo)全局惟一操做 } for { lock.Lock() c := data lock.Unlock() if c >= 10 { fmt.Println("val=", data, "exit") break } } }