并发导致的问题
var money int = 0
func add(pint *int) {
for i := 0; i < 100000; i++ {
*pint++
}
}
func AddMoney() {
for i := 0; i < 1000; i++ {
// 这里使用了协程调用,导致多个协程调用同一个资源,产生资源竞争,结果不正确
go add(&money)
}
time.Sleep(time.Second*5)
fmt.Println(money)
}
预期结果是100000000,但是由于add方法是协程方式调用的,存在并发的情况,导致结果不符合预期。
读写锁小例子
// 全局变量
var money int = 0
// 初始化锁
var lock *sync.RWMutex = new(sync.RWMutex)
func add2(pint *int) {
// 为了避免资源竞争,操作时需要上锁
// 加锁
lock.