首页 > 其他分享 >Go循环打印cat-dog-fish。。。。。

Go循环打印cat-dog-fish。。。。。

时间:2024-02-19 11:26:36浏览次数:40  
标签:wg fish chDog dog chFish chCat cat

package main

import (
	"fmt"
	"sync"
)

// 三个协程交替打印 cat dog fish
var repeatCount = 10

func main() {
	// wg 用来防止主协程提前先退出
	wg := &sync.WaitGroup{}
	wg.Add(3)

	chCat := make(chan struct{}, 1)
	chDog := make(chan struct{}, 1)
	chFish := make(chan struct{}, 1)
	defer func() {
		close(chCat)
		close(chDog)
		close(chFish)
	}()

	go printAnimal(chCat, chDog, "cat", wg)
	go printAnimal(chDog, chFish, "dog", wg)
	go printAnimal(chFish, chCat, "fish", wg)
	chCat <- struct{}{}
	wg.Wait()
}

// wg 需要传指针
func printAnimal(in, out chan struct{}, s string, wg *sync.WaitGroup) {
	count := 0
	for {
		<-in
		count++
		fmt.Printf("%s,%d\n", s, count)
		out <- struct{}{}
		if count >= repeatCount {
			wg.Done()
			return
		}
	}
}

标签:wg,fish,chDog,dog,chFish,chCat,cat
From: https://www.cnblogs.com/qcy-blog/p/18020684

相关文章

  • openssl pkcs12 -info -in certificate.pfx
    通用名称(CommonName):也称为主题名称(SubjectName),是证书中代表个人身份的主要标识。通常会包含个人的姓名或特定名称。组织(Organization):证书中列出的个人所属的组织或单位名称。部门(Department):可选字段,用于指定个人所属的部门或单位的名称。城市(City):个人所在城市的名称......
  • 适用于 Amazon Step Functions 的低代码可视化新工作流 Workflow Studio, 现已在 Amaz
    今天,我们非常欣喜地宣布现已在AmazonApplicationCompose中推出AmazonStepFunctionsWorkflowStud。通过这款全新的集成应用,工作流与应用程序资源开发便可整合到统一的可视化基础设施即代码(IaC)生成器。对于使用AmazonStepFunctionsWorkflowStudio创建工作流与......
  • Navicat Premium 16:打破数据库界限,实现高效管理mac/win版
    NavicatPremium16是一款功能强大的数据库管理工具,旨在帮助用户更轻松地连接、管理和保护各种数据库。该软件支持多种数据库系统,如MySQL、Oracle、SQLServer、PostgreSQL等,并提供了直观的图形界面,使用户能够轻松地完成各种数据库操作。→→↓↓载NavicatPremium16mac/win版......
  • Server & Application Monitor
    快速可定制的Windows服务器监控工具获取全面信息,控制WindowsIT环境优化资源使用率和容量预测SolarWinds®Server&ApplicationMonitor()Windows服务器管理工具提供内置功能预测图表和指标,可在服务器资源将达到警告和临界阈值时轻松识别出这一情况。检测高CPU使用率......
  • String的不可变,StringBuilder.append方法和String.concat
    String.concat对String字符串进行拼接的方法,我们通常用的“+”拼接字符串,效率相比concat更低,其内部实现方式类似于newStringBuilder().append,每次拼接都会创建一个StringBuilder对象。concat方法的核心逻辑:创建长度为str.length+str2.length的char数组,通过Arrays.copyOf创建,该......
  • 通过ApplicationContext.getBean()获取bean实例
    spring获取bean容器管理的实例常用方式有两种。    1.  使用注解注入,@Autowired和@Resource@Autowired推荐使用构造函数的方式注入,可被@RequiredArgsConstructor代替@Resource在接口的实现类有多个的时候使用,指定name=实现类名来注入指定的实现类,但@Autowired+@Qualififier......
  • pd.Concat() and pd.merge()
    Thepd.concat()functioninpandasisapowerfultoolforconcatenatingor"stacking"togetherobjectsalongaparticularaxis.ThisfunctioncantakealistordictionaryofSeries,DataFrames,orPanelobjectsandjointhemeitherbyrows(axi......
  • 安卓逆向环境指北 rk3588 orangepi5b macM1 cuttlefish redroid
    省流安卓现在有若干种方案买个pixel6真机随便刷rom多,文档直接看google官方的即可缺点贵刷砖了难救windows的安卓模拟器傻瓜式部署但是安卓版本低特征多跑不了arm的soAVDwindowsormacorlinux有多个安卓版本但是基本没办法自定义内核想自定义内核再替换......
  • Tomcat官网下载版本:如何选择tar.gz (pgp, sha512)和zip (pgp, sha512)?
    先上结论:选择tar.gz格式还是zip格式的文件下载,主要取决于操作系统和个人偏好:tar.gz(pgp,sha512):这是一种在Unix-like系统(如Linux和macOS)中常用的压缩格式。tar是一种将多个文件合并为单个文件(归档)的工具,而gz是gzip,用于压缩归档文件。pgp和sha512分别提供了文件......
  • JwtAuthenticationTokenFilter
    packagecom.oep.backend.config.filter;//实现config.filter.JwtAuthenticationTokenFilter类,用来验证jwttoken,如果验证成功,则将User信息注入上下文中importcom.oep.backend.mapper.AccountMapper;importcom.oep.backend.pojo.Account;importcom.oep.backend.service......