当前位置: 首页 > 面试题库 >

如果在第一次迭代和第二次迭代之间有一小段时间

潘佐
2023-03-14
问题内容

在下面的代码中,迭代运行两次。
是否可能恰好在第一次迭代和第二次迭代之间运行“ test2 <-true”?
我的意思是,在第一次迭代结束而第二次迭代未开始时,是否将true发送给“ test2”?

package main

import "log"
import "time"

func main() {
    test := make(chan bool, 1)
    test2 := make(chan bool, 1)

    go func() {
        for {
            select {
            case <-test:
                log.Println("test")
            case <-test2:
                log.Println("test2")
            }
        }
    }()

    test <- true
    time.Sleep(1)
    test2 <- true
    time.Sleep(1)
}

问题答案:

是。由于您的频道已缓冲,可以保存1个值。主执行流程可以继续进行,而无需您的匿名goroutine读取您发送到test通道的值,并且可以test2在goroutine唤醒并读取通道上的值之前在通道上发送值test

因为您有时间,所以不太可能发生这种情况。Sleep()调用通常会给goroutine执行时间,但是并没有告诉您在机器非常繁忙,电源处于停电状态的情况下会发生什么情况。不幸的时光或其他您没有想到的事情。

如果您的test通道未缓冲,则该test <- true语句将阻塞,直到您的goroutine接收到该值为止,并且在test2从该test通道接收任何内容之前,该goroutine至少没有接收的可能。



 类似资料:
  • 问题内容: 有没有一种优雅的方法可以跳过Java5 foreach循环中的第一次迭代? 伪代码示例: 问题答案: 我不会称其为优雅,但可能比使用“第一个”布尔值更好: 除此之外,可能没有优雅的方法。

  • 问题内容: 该脚本未遍历“模块”数组的所有值。 这是运行的结果。该数组显示4个元素,但是.each黑色中的代码仅执行一次。 正在运行:打印消息[Module @ 71f09325,Module @ e1ddb41,Module @ 7069a674,Module @ 1f68f952]正在 运行:打印消息模块名称::::: puppetlabs-ntp正在 运行:打印消息安装非自定义正在 运行:工

  • 我有一个fprintf语句,它循环3次以显示一些数据。在第一次迭代之后,MATLAB显示了一个神秘的空间,尽管我没有添加额外的\t。它的作用就像我有一个if语句在第一次迭代后显示不同的fprintf语句一样,但我在代码上没有这样的语句。有关它显示的结果,请参见链接上的图片

  • 假设我有一个音乐平台的用户监听的下表: 其中,id(int)是收听音乐(或书籍或任何其他材料)的用户的记录,user_id(int)是收听者id,started_at(timestamp)是用户开始收听的时间,finished_at是用户完成收听的时间 我需要做的是找出用户第一次和第二次收听之间的平均时间。例如,对于user_id=101的第一个用户,它将是: “2017-10-05 15:15:

  • 我有这个程序,每次我检查控制台的输入时,根据提供的输入,我决定是继续还是终止程序。 这是第一次,它工作得很好,但在第二次迭代中,我没有发现任何异常。 为什么它在不请求输入参数的情况下抛出异常。 这是控制台输出。

  • 问题内容: 所以,我有这个php文件,但是第一个结果没有被包装在’result’div中,因此样式也不正确。所有后续结果均已正确包装。帮助? 编辑:根据评论,我试图拉出html。我承认我是菜鸟,但这是我想出的。似乎无法解决原始问题: scripts_post.php: single_result.php: 编辑#2:这就是上面所说的。也许这里有些东西缠着东西? 问题答案: 找到了问题。真的很傻 实