七叶笔记 » golang编程 » Golang并发编程,5、单向channel、channel的迭代与关闭

Golang并发编程,5、单向channel、channel的迭代与关闭

有这么一个案例,

有1个加工厂,只能生产不能销售

有1个销售商,只能销售不能生产

(1)为了保证每1个生产的产品都能销售出去,保障零库存

(2)也为了防止加工厂销售,也为了防止销售商生产,那么就需要1个单通道。

1、定义1个双向通道

 var ch = make(chan int)  

2、定义加工厂

 func Factory(f chan<- int) {
   for i := 0; i < 10; i++ {
      f <- i
      fmt.Println("Factory Worked:",i)
      time.Sleep(time.Second)
   }
   close(f)
}  

3、定义销售商

 func Consumers(c <-chan int) {
   for i := range c {
      fmt.Println("Consumers Worked:",i)
   }
}  

4、协调加工厂和销售商进行工作

 go Factory(ch)
Consumers(ch)  

5、执行情况

6、代码截图

7、源码分享

 package main

import (
   "fmt"
   "time"
)

func Factory(f chan<- int) {
   for i := 0; i < 10; i++ {
      f <- i
      fmt.Println("Factory Worked:",i)
      time.Sleep(time.Second)
   }
   close(f)
}

func Consumers(c <-chan int) {
   for i := range c {
      fmt.Println("Consumers Worked:",i)
   }
}
func main() {
   var ch = make(chan int)
   go Factory(ch)
   Consumers(ch)
}
  

相关文章