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 := <-ch
		fmt.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:
				return
			default:
				time.Sleep(100 * time.Millisecond)
			}
		}
	}()

	termChan := make(chan os.Signal)
	signal.Notify(termChan, syscall.SIGINT, syscall.SIGTERM)
	<-termChan

	close(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)
}

相关推荐

  1. Go并发练习题目

    2024-01-16 11:34:02       36 阅读
  2. 练习题目

    2024-01-16 11:34:02       33 阅读
  3. Go题目

    2024-01-16 11:34:02       14 阅读
  4. Go 语言中并发威力

    2024-01-16 11:34:02       38 阅读
  5. Go工作池:并发任务优雅管理

    2024-01-16 11:34:02       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-16 11:34:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-16 11:34:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-16 11:34:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-16 11:34:02       18 阅读

热门阅读

  1. Tomcat教程

    2024-01-16 11:34:02       35 阅读
  2. 根据屏幕尺寸设置html根字号fontSize大小并刷新

    2024-01-16 11:34:02       33 阅读
  3. Ubuntu纯净服务器系统使用Nginx+uwsgi部署django项目

    2024-01-16 11:34:02       36 阅读
  4. Vue+Koa2 搭建前后端分离项目

    2024-01-16 11:34:02       33 阅读
  5. 距离场和距离变换:distance_transform

    2024-01-16 11:34:02       34 阅读
  6. 计算机视觉市场分析:预计2029年将达到870亿元

    2024-01-16 11:34:02       37 阅读
  7. 代码仓库gitlab的数据迁移步骤

    2024-01-16 11:34:02       30 阅读
  8. Github Copilot 的使用方法和快捷键

    2024-01-16 11:34:02       34 阅读