为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我相同的围棋程序出现故障?

为什么我相同的围棋程序出现故障?

Go
海绵宝宝撒 2022-01-10 17:27:53
我有以下执行例程的 go 代码。package mainimport (        "fmt"        "time")func count(id int) {        for i := 0; i < 10; i++ {                fmt.Println(id, ":", i)                time.Sleep(time.Millisecond * 1000)        }   }func main() {        for i := 0; i < 10; i++ {                go count(i)        }           time.Sleep(time.Millisecond * 11000)}我希望输出是:1 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 01 : 12 : 13 : 14 : 1etc...但相反,我得到:0 : 06 : 07 : 05 : 08 : 09 : 03 : 02 : 04 : 01 : 05 : 16 : 17 : 11 : 18 : 1etc...为什么它们不是按照原始的顺序,在外部 for 循环执行 count 方法?为什么某些计数方法不同步?
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

goroutine 何时执行是程序员无法控制的。如果您通过通道和 sync.WaitGroup 使用信号,您可以进行一些控制(例如让一个 goroutine 等待另一个 goroutine 完成),但您无法控制 goroutines 的执行顺序


查看完整回答
反对 回复 2022-01-10
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

正如其他人已经评论的那样,goroutine 主要针对并发性。并发可以包含并行性和通信。如果你想控制他们的顺序,你必须让他们通过SIGNAL进行交流。例如,一个 goroutine 等待来自另一个 goroutine 的信号。请特别检查 goroutine 和 channel。


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信