go并发的一点小疑问

sysummery
  • 647
package main

import "fmt"

func main() {
    go loop()
    go loop()
}

func loop() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
}

这是我的代码,结果是什么都没输出;按我的理解是应该输出两边0-9的

回复
阅读 1.5k
4 个回答
ezmo
  • 7k
✓ 已被采纳

Go语言的原则是当main函数运行结束后,所有正在运行的协程都会终止! 也就是说主程序就已经退出了,go后的两个function还没来得及执行,所以看不到打印。
你可以让主程序“睡”一会儿再退出,然后看看结果就明白了!

package main

import (
   "fmt"
   "time"
)


func main() {
   go loop()
   go loop()
   time.Sleep(500000)
}

func loop() {
    for i := 0; i<10; i++ {
        fmt.Println(i)
    }
}

好歹让主go routine阻塞住不要退出呐

package main

import (
    "fmt"
    "sync"
)

var wg sync.WaitGroup

func main() {

    go loop()
    go loop()

    wg.Wait()
}

func loop() {
    wg.Add(1)
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    wg.Done()
} 
FLYUP
  • 1
新手上路,请多包涵

主线程结束了,整个程序就结束了

宣传栏