原子操作
var a int32
for i := 1;i <= 1000;i++{
go func(a *int32, i int) {
rs := atomic.AddInt32(a, 1)
defer atomic.AddInt32(a, -1)
if i%2 == 0{
time.Sleep(1*time.Second)
}
if rs != 1 {
//*a += 1
//defer func() {
// *a -= 1
//}()
//if *a != 1 {
// log.Println(*a)
return
}
log.Println(i, *a)
}(&a, i)
}
time.Sleep(5*time.Second)
log.Println("a:",a)
for {
time.Sleep(time.Second)
}