霸王餐 (上)

未匹配的标注

几日的奔波, 小白来到了一个新的小镇, 街上人来人往, 车水马龙, 一切显的繁华而又有序.

啃了几天干粮嘴里都快淡出个鸟来了, 找家客栈歇下脚, 顺便找点好吃的 —— 小白心想.

打听了下, 镇上有家 “双珠砂锅” 味道不错, 就这家了.

吃完准备结账时, 小白看到店里有个 “答题免单” 的活动, 题目如下:

// 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.

许久, 小白败下阵来, 不得不承认是自己没看懂这道题.

只好乖乖的付账走人.

“我一定要吃上一顿霸王餐” —— 不服输的小白恶狠狠地说到.

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
taadis
讨论数量: 0
发起讨论 只看当前版本


暂无话题~