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 } } }