huo72020

  要求:有一个生产者,可以依次生产[0, 100)这100个数字,有5个消费者进行消费,消费者是并发的。

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	wg := sync.WaitGroup{}
	wg.Add(20)
	c := make(chan int, 20)

	for i := 1; i <= 5; i ++ {
		//注意要传&wg
		go consumer(i, c, &wg)
	}
	producer(c)
	//等待协程全部结束,wg归0即可退出
	wg.Wait()
}

func producer(c chan int) {
	for i := 0; i < 20; i ++ {
		c <- i
	}
	//记得关闭管道
	close(c)
}

func consumer(consumerSeq int, c chan int, wg *sync.WaitGroup) {
	for num := range c { //从channel中读取数据,channel关闭后循环结束,channel为空时阻塞
		fmt.Println("消费者序号:", consumerSeq, num)
		//模拟消费者在消费后进行的逻辑处理,否则打印函数耗时很短,可能一个消费者就全都消费完了
		time.Sleep(1 * time.Millisecond)
		//释放一个WaitGroup
		wg.Done()
	}
}

  

分类:

技术点:

相关文章:

  • 2021-11-30
  • 2021-09-18
  • 2021-08-17
  • 2022-02-04
  • 2021-09-11
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-18
  • 2021-10-15
  • 2021-07-12
  • 2021-12-28
  • 2022-12-23
  • 2021-12-05
  • 2021-11-30
相关资源
相似解决方案