当前位置:   article > 正文

Golang 面试题 (4) N个协程交替打印1-100

golang协程间同步练习题

Golang 面试题 (4) N个协程交替打印1-100

  • 启动N个协程,共用一个外部变量计数器,计数器范围是1到100
  • 开启N个有缓冲chan,chans[i]塞入数据代表协程i可以进行打印了,打印的数字就是计数器的数
  • 协程i一直阻塞,直到chan[i]通道有数据可以拉,才打印
  1. func main() {
  2. gorutinenum := 5
  3. var chanslice []chan int
  4. exitchan := make(chan int)
  5. for i := 0; i < gorutinenum; i++ {
  6. chanslice = append(chanslice, make(chan int, 1))
  7. }
  8. res := 1
  9. j := 0
  10. for i := 0; i < gorutinenum; i ++ {
  11. go func(i int) {
  12. for {
  13. <-chanslice[i]
  14. if res > 100 {
  15. exitchan <- 1
  16. break
  17. }
  18. fmt.Println(fmt.Sprintf("gorutine%v:%v", i, res))
  19. res ++
  20. if j == gorutinenum-1 {
  21. j = 0
  22. }else {
  23. j ++
  24. }
  25. chanslice[j] <- 1
  26. }
  27. }(i)
  28. }
  29. chanslice[0] <- 1
  30. select {
  31. case <-exitchan:
  32. fmt.Println("end")
  33. }
  34. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43008
推荐阅读
相关标签
  

闽ICP备14008679号