go 语言 goroutine 与 主 goroutine 的代码的先行性问题。

demon_li · · 3393 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

本人新学Go语言,有个问题一直没找到相关资料,请高手帮忙解答以下。 在Java中,多个线程之间,只有保证了 先行性问题,才能保证不同线程的代码是按预期的先后顺序执行 以下是示例代码: ```go package main import ( "fmt" ) func main() { // 构建一个通道 ch := make(chan int) // 开启一个并发匿名函数 go func() { fmt.Println("start goroutine") //1 // 通过通道通知main的goroutine ch <- 0 fmt.Println("exit goroutine") //2 }() fmt.Println("wait goroutine") //3 // 等待匿名goroutine <-ch fmt.Println("all done") //4 } ``` 输出结果: 执行了多次一直是这个结果,与java学到的线程相关知识不匹配。 ``` go wait goroutine start goroutine exit goroutine all done ``` 为什么 1和3 不是随机出现的, 2和4 不是随机出现的。 1和3 是2个不同goroutine,不是应该不能保证哪行代码先执行吗。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3393 次点击  
加入收藏 微博
7 回复  |  直到 2021-06-28 11:31:21
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传