霸王餐 (上)
几日的奔波, 小白来到了一个新的小镇, 街上人来人往, 车水马龙, 一切显的繁华而又有序.
啃了几天干粮嘴里都快淡出个鸟来了, 找家客栈歇下脚, 顺便找点好吃的 —— 小白心想.
打听了下, 镇上有家 “双珠砂锅” 味道不错, 就这家了.
吃完准备结账时, 小白看到店里有个 “答题免单” 的活动, 题目如下:
// main.go
package main
import (
"fmt"
"sync"
)
func main() {
counter := 0
wg := sync.WaitGroup{}
for i := 0; i < 10000; i++{
wg.Add(1)
go func() {
counter++
wg.Done()
}()
}
wg.Wait()
fmt.Println(counter)
}
看起来很简单, 不就是让一万个协程累加计数器嘛, 结果应该是 10000
才对.
可麻溜的运行后输出如下:
go run main.go
9471
咦, 小白楞了一下, 不信邪的又运行了一遍:
go run main.go
9456
哎呀我去, 见鬼了, 小白赌气的又运行了 N 多次, 结果没有一个输出是等于 10000 的, 基本都小于 10000.
许久, 小白败下阵来, 不得不承认是自己没看懂这道题.
只好乖乖的付账走人.
“我一定要吃上一顿霸王餐” —— 不服输的小白恶狠狠地说到.