码迷,mamicode.com
首页 > 其他好文 > 详细

实现一个简单的生产者-消费者模型

时间:2020-09-18 02:18:26      阅读:27      评论:0      收藏:0      [点我收藏+]

标签:func   import   imp   并发   取数   ann   ons   WaitGroup   序号   

  要求:有一个生产者,可以依次生产[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()
	}
}

  

实现一个简单的生产者-消费者模型

标签:func   import   imp   并发   取数   ann   ons   WaitGroup   序号   

原文地址:https://www.cnblogs.com/huo72020/p/13674566.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!