登录
首页 >  Golang >  Go问答

我能够根据发送的顺序来选择唤醒的顺序吗?

来源:stackoverflow

时间:2024-03-03 17:30:29 166浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《我能够根据发送的顺序来选择唤醒的顺序吗?》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

想象一个如下所示的代码模式:

var a chan T = make(chan T)
var b chan Q = make(chan Q)

//consumer goroutine
for {
   select {
   case <-a:
       //...
   case <-b:
       //...
   }
}

//producer goroutine
...
a <- x
b <- y
...

如果只有一个生产者,是否可以保证我们始终可以从 case: <-a 中检索 x,然后再从 case :<-b 中检索 y?


解决方案


是的,您可以依赖该顺序,因为通道 a 是无缓冲的。

只有当发送方和接收方准备就绪时,无缓冲通道上的通信才会成功。发送方在收到值之前不会执行 a <- x 语句。由此可见,这些值是按发送顺序接收的。

如果通道 a 被缓冲,则不能保证顺序。在发送两个值之前,接收器可能不会执行。当接收器在发送值后执行时,无法保证选择的哪个分支将首先执行。

本篇关于《我能够根据发送的顺序来选择唤醒的顺序吗?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>