package main
import (
"fmt"
"sync" // 同步操作
"sync/atomic" // 提供原子操作函数,用于并发安全地操作共享变量。
)
var counter int64//计数器
var wg sync.WaitGroup//WaitGroup 主要用于协调多个 goroutine 的执行,确保在所有 goroutine 都完成后再继续执行接下来的操作。
func incr(){
atomic.AddInt64(&counter,1)//+1
wg.Done()//-1。+1 -1代表一个go的执行完毕
}
func main() {
wg.Add(2)//表示需要等待两个 goroutine 完成。
go incr()
go incr()
wg.Wait()//调用 wg.Wait()// 阻塞主 goroutine,直到所有 goroutine 执行完成。
fmt.Println("值:", atomic.LoadInt64(&counter))
}
//并发竞争
//会出现数据不一致 程序崩溃 逻辑错误等问题。因为没有同步机制的话。例如,两个 goroutine 同时读取变量、修改变量并写回,但最终结果可能取决于它们之间的执行顺序,而不是程序的代码顺序。