基于go的生产者消费者模型

基于go的生产者消费者模型

//生产者
func Producer(ch chan int) {
	for i := 1; i <= 10; i++ {
		ch <- i
	}
	close(ch)
}
//消费者
func Consumer(id int, ch chan int, done chan bool) {
	for {
		value, ok := <-ch
		if ok {
			fmt.Printf("id : %d consum %d value \n", id, value)
		} else {
			fmt.Printf("id : %d had closed \n", id)
			break
		}
	}
	done <- true
}

测试文件

const (
	cur int = 2
)

func main() {
	ch := make(chan int, 3)
	done := make(chan bool, 1)
	for i := 1; i <= 2; i++ {
		go Consumer(i, ch, done)
	}
	go Producer(ch)
        //注意这里,如果done channel里面没有true的化会一直阻塞直到有东西进来。
	for i := 1; i <= cur; i++ {
		<-done
	}
}
posted @ 2019-11-09 10:45  jchar  阅读(294)  评论(0编辑  收藏  举报