关于 goroutine 运行问题

代码如下

package main

import (
    "fmt"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        //time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
    go say("world")
    say("hello")
}

下面是相同环境下运行,为什么有概率发生 world 的结果不出来(time.Sleep关闭情况下)
clipboard.png

clipboard.png

阅读 2.2k
2 个回答
package main

import (
    "fmt"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        //time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
    go say("world")
    say("hello")
    time.Sleep(100 * time.Millisecond) //增加这一行你就每次都能看见了, 主线程跑得有时太快,你需要等等这个世界
}

主线程退出时,是不会等子线程执行完的, 会直接杀死。

在多线程编程里面,进程里面的线程分为两种,主线程和主线程创建的其它线程。如果主线程终止,所有被主线程创建的线程都会被终止。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题