请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

ccmouse老师,我查了下select的case同时满足的情况下会随机选择一个执行

那么理论上有没有可能tick会把append数据的操作给干掉啊,这样不就造成数据会跳跃吗,我实际运行了一下,然而并不能,我把tick设成毫秒,发现并不影响数据的插入,还是按照顺序来的图片描述

正在回答 回答被采纳积分+3

1回答

ccmouse 2019-01-08 20:12:08

这么做的确没有问题。两个channel同时有数据,的确会随机选取一个,有可能选到tick,这次select操作就结束了。但是,c1里面的数据还在,不会丢。外层for循环会再次让我们运行下一次select,此时就会选择c1里的数据。
极端情况下,tick如果特别短(毫秒不短了),理论上会永远select不到c1。但实际上,由于select是随机的,所以也还是会select到

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉2143548772 #1
    老师,我是这样想的,case <-tick 满足了,同时,case n:=<-c1也满足了,然后n的值打比方是1,但是随机没有执行到后面的value=append(value,n),这时候channel c1的值已经被n接受了,就会运行下面的去接受2。您的意思是如果没被执行到,n就不能接受channe c1传过来的值吗?我逻辑上有点转不过来啊
    回复 有任何疑惑可以回复我~ 2019-01-09 10:34:54
  • ccmouse 回复 提问者 慕粉2143548772 #2
    哦,当然不会这样。随机到tick的话,n不会有值的。值还在channel里面。并不会把这几句case都执行一遍,只会选一句执行
    回复 有任何疑惑可以回复我~ 2019-01-09 20:59:09
  • 提问者 慕粉2143548772 回复 ccmouse #3
    ok,知道了,谢谢老师。
    回复 有任何疑惑可以回复我~ 2019-01-10 09:36:17
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信