package main
import (
"fmt"
"sync"
)
func main() {
var (
i int
wg sync.WaitGroup
)
wg.Add(2)
go func() {
for {
i++
}
}()
go func() {
for {
fmt.Println(i)
}
}()
wg.Wait()
}
这段代码一直输出 0,为什么?
更多评论
```go
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var (
i int
wg sync.WaitGroup
)
wg.Add(2)
go func() {
for {
i++
time.Sleep(time.Nanosecond)
}
}()
go func() {
for {
fmt.Println(i)
}
}()
wg.Wait()
}
按照上面给第一个协程加一个延时就没问题,我也没有深入了解原因。
但我知道肯定是多个协程对同一个变量操作的问题。但实际编码时需要对这些变量
加锁,所以这段代码没有啥实际意义,如果你敢把这种不加锁保护变量的代码写到生产环境
肯定是会被骂惨了。
```
#2