goroutine+channel实现对多个goroutine的顺序执行

简介: goroutine+channel实现对多个goroutine的顺序执行

问:

要求创建三个函数分别打印,“dog”,“cat”,“fish”,
要求每个函数起一个goroutine,请按照dog,cat,fish的顺序,打印四次,输出到控制台。

代码:

package main

import (
    "fmt"
)

func main() {
   
    dogCh := make(chan bool, 1) //给一个1的缓存区是为了暂存fish函数最后发生的一个true
    catCh := make(chan bool)
    fishCh := make(chan bool)
    exitch := make(chan bool)
    go func() {
   
        for i := 0; i < 4; i++ {
   
            if <-dogCh {
   
                fmt.Println("dog")
                catCh <- true
            }
        }
    }()

    go func() {
   
        for i := 0; i < 4; i++ {
   
            if <-catCh {
   
                fmt.Println("cat")
                fishCh <- true
            }
        }
    }()
    go func() {
   
        defer close(exitch) //在协程最后close exit给出信号协程执行完毕,避免主go结束协程未跑完造成死锁
        for i := 0; i < 4; i++ {
   
            if <-fishCh {
   
                fmt.Println("fish")
                dogCh <- true
            }
        }
    }()
    dogCh <- true
    <-exitch
}
相关文章
|
XML 监控 Java
【Java】Spring Boot项目的创建和使用
【Java】Spring Boot项目的创建和使用
|
3月前
|
人工智能 IDE 开发工具
Qoder 1.0正式发布!从AI IDE迈向智能体自主开发工作台
阿里发布Qoder 1.0,从AI IDE升级为智能体自主开发工作台:用户只需定义需求,Agent团队即可“自动驾驶”,完成执行、验证与交付全流程。支持Windows/macOS/Linux,集成Quest独立视窗、跨项目并行、团队知识引擎及可定制专家团。
|
Java 应用服务中间件 nginx
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
4650 0
|
12月前
|
存储 移动开发 Ubuntu
设置Ubuntu 22.04 LTS上的rsync同步服务
通过以上方法可以实现Ubuntu系统间基础且高效率得数据备份与共享。根据具体需求调整参数并测试以确认一切按预期工作。
665 14
|
数据管理 开发工具 索引
在Python中借助Everything工具实现高效文件搜索的方法
使用上述方法,你就能在Python中利用Everything的强大搜索能力实现快速的文件搜索,这对于需要在大量文件中进行快速查找的场景尤其有用。此外,利用Python脚本可以灵活地将这一功能集成到更复杂的应用程序中,增强了自动化处理和数据管理的能力。
989 0
|
弹性计算 Kubernetes API
Kubernetes 驱动的 IaC,Crossplane 快速入门
Crossplane 是一个开源的 Kubernetes 扩展工具,允许用户通过声明式配置直接在 Kubernetes 中管理云资源。对于阿里云开发者,借助 Crossplane 和官方提供的 provider-upjet-alibabacloud,可以像管理 Pod 一样轻松操作 ECS 实例、VPC 和 OSS Bucket 等资源。本文介绍了 Crossplane 的核心概念,并通过快速入门指南演示了如何安装 Crossplane、配置阿里云认证并创建第一个 VPC 资源。
1471 37
|
监控 安全 Java
SpringBoot应用-Actuator监控
Spring Boot Actuator 是 Spring Boot 提供的一个独立模块,旨在通过简单的方式提供应用程序的监控和管理功能。Actuator 内置了多种端点(Endpoints),可以用于查看应用的健康状况、配置属性、日志级别等。
1340 1
|
运维
JumpServer的会话管理及命令过滤器应用案例
文章展示了JumpServer的会话管理功能,包括查看命令记录、在线会话和历史会话,并介绍了命令过滤器的创建和应用案例。
832 2
JumpServer的会话管理及命令过滤器应用案例
|
Shell 数据安全/隐私保护
Mac上HomeBrew安装及换源教程
【8月更文挑战第30天】这是在 Mac 上安装及更换 Homebrew 源的教程。首先通过终端执行命令 `/bin/bash -c &quot;\$\(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh\)` 安装 Homebrew,并使用 `brew --version` 检查是否安装成功。接着可更换软件源以提高下载速度,例如设置中科大为源,并更新相关设置。这将有助于提升 Homebrew 的使用体验。
3702 10
|
Kubernetes 算法 调度
Kubernetes的灵魂核心:kube-scheduler
本文介绍了Kubernetes中关键组件kube-scheduler的工作原理,详细解释了其通过预选和优选过程为Pod选择合适节点的机制,并提供了一个简化的Python示例来模拟这一过程,帮助读者更好地理解和管理Kubernetes集群。

热门文章

最新文章