生产消费者模型
package main
import "fmt"
import "time"
import "sync"
import "math/rand"
type job struct{
value int64
}
type result struct{
job *job
sum int64
}
var jobchan = make(chan *job, 100)
var resultchan = make(chan *result, 100)
var wg sync.WaitGroup
func zhoulin(zl chan <- *job){
defer wg.Done()
for {
x := rand.Int63()
newjob := &job{
value :x,
}
zl <- newjob
time.Sleep(time.Microsecond * 500)
}
}
func baodelu(zl <-chan *job, resultchan chan<- *result){
defer wg.Done()
for {
job := <-zl
sum := int64(0)
n := job.value
for n > 0{
sum += n % 10
n = n / 10
}
newresult := &result{
job :job,
sum :sum,
}
resultchan <- newresult
}
}
func main () {
wg.Add(1)
go zhoulin(jobchan)
wg.Add(5)
for i := 0; i < 5; i++{
go baodelu(jobchan,resultchan)
}
for result := range resultchan{
fmt.Printf("value:%d,sum:%d",result.job.value,result.sum)
}
wg.Wait()
}
该博客探讨了一个使用Go语言实现的生产者消费者模型。通过`zhoulin`函数生成随机数作为产品,`baodelu`函数进行计算求和,利用通道`jobchan`和`resultchan`进行数据传递。此模型展示了并发处理和同步的基本概念。
4288

被折叠的 条评论
为什么被折叠?



