当前位置: 首页 > news >正文

Go的并发练习题目

经典并发题目

现在有4个协程,分别对应编号为1,2,3,4,每秒钟就有一个协程打印自己的编号,要求编写一个程序,让输出的编号总是按照1,2,3,4,1,2,3,4这样的规律一直打印下去

type Token struct {
}func newWorker(id int, ch chan Token, nextCh chan Token) {for {token := <-chfmt.Println(id + 1)time.Sleep(time.Second)nextCh <- token}
}func testGoroutine() {chs := []chan Token{make(chan Token), make(chan Token), make(chan Token), make(chan Token)}for i := 0; i < 4; i++ {go newWorker(i, chs[i], chs[(i+1)%4])}chs[0] <- struct{}{}select {}
}

信号通知题目

使用chan来实现程序的graceful shutdown,在程序退出之前来执行一些连接的关闭,文件的close相关操作。

func testClosed() {var closing = make(chan struct{})var closed = make(chan struct{})go func() {for {select {case <-closing:returndefault:time.Sleep(100 * time.Millisecond)}}}()termChan := make(chan os.Signal)signal.Notify(termChan, syscall.SIGINT, syscall.SIGTERM)<-termChanclose(closing)go doCleanUp(closed)select {case <-closed:case <-time.After(time.Second):fmt.Println("clean timeout")}fmt.Println("gracefully exit")
}func doCleanUp(closed chan struct{}) {time.Sleep(time.Minute)close(closed)
}

http://www.lryc.cn/news/281643.html

相关文章:

  • Python 网络编程之粘包问题
  • 旧衣回收小程序搭建:降低企业成本,提高回收效率!
  • Jmeter后置处理器——JSON提取器
  • [SWPUCTF 2022 新生赛]奇妙的MD5
  • MHFormer 论文解读
  • Python列表append()函数使用详解
  • 第08章_面向对象编程(高级)拓展练习(关键字:static,代码块,关键字:final,抽象类和抽象方法,接口,内部类,枚举类,注解,包装类)
  • 分布式光伏运维平台在提高光伏电站发电效率解决方案
  • 2024.1.14~1.20 周内刷题总结
  • 徐州数字孪生元宇宙赋能工业智能制造,助力传统制造业数字化转型
  • 智云谷再获资本市场青睐,完成数千万元A+轮融资
  • ACM论文LaTeX模板解析(三)| 文章顶部信息(Top matter))Part 1
  • [GDOUCTF 2023]受不了一点
  • 精心挑选免费好用的api,推荐给大家
  • (001)window 使用 OpenObserve
  • linux发送http请求命令
  • JVM实战(19)——JVM调优工具概述
  • Windows10无法访问github
  • GIT 分支管理办法(二)
  • Vue面试之Mixins
  • YOLOv8改进 | 主干篇 | EfficientViT高效的特征提取网络完爆MobileNet系列(轻量化网络结构)
  • 分布式限流要注意的问题
  • git将一个远程分支的部分修改提交到另一个远程分支
  • promise是什么怎么使用
  • 国际版WPS Office 18.6.1
  • 记录一次数据中包含转义字符\引发的bug
  • 网络协议:ICMP协议及实用工具介绍
  • Hyper-V如何设置网络-虚拟交换机设置
  • SAP不同语言开发
  • 瑞_Java开发手册_(一)编程规约