编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

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

wxchong 2024-07-25 13:32:24 开源技术 16 ℃ 0 评论

有这么一个案例,

有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)
}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表