golang无缓冲通道
程序员文章站
2022-05-29 22:26:04
...
无缓冲通道
通道是goroutine之间的安全通讯机制。是阻塞/同步机制
package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
var wg sync.WaitGroup
func init() {
rand.Seed(time.Now().UnixNano())
}
func main() {
cc := make(chan byte)
wg.Add(2)
// 运动员就绪
go playball("ping jie", cc)
go playball("luo ge", cc)
cc <- 1
wg.Wait()
}
// 运动员
func playball(name string, cc chan byte) {
defer wg.Done()
for {
// 接球
ball, ok := <-cc
if !ok {
fmt.Printf("Player %s Won\n", name)
return
}
// 结束条件判断
n := rand.Intn(50)
if n%9 == 0 {
fmt.Printf("Player %s Missed\n", name)
close(cc)
return
}
// 发球
fmt.Printf("Player %s Hit %d\n", name, ball)
cc <- ball
}
}
推荐阅读
-
对比PHP对MySQL的缓冲查询和无缓冲查询
-
巧夺天工的kfifo:Linux Kernel中的无锁环形缓冲讲解 博客分类: C/C++AlgorithmLinux LinuxKernellock-free
-
NIO_缓冲区和通道
-
【golang源码分析】chan底层原理——环形缓冲区
-
对比PHP对MySQL的缓冲查询和无缓冲查询
-
汇编语言二 在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列。
-
[Go] golang的range循环遍历通道
-
[Go] golang缓冲通道实现资源池
-
FlashFXP 上传10055错误 无缓冲空间可用解决方案
-
FlashFXP 上传10055错误 无缓冲空间可用解决方案