/**
无缓冲的channel
无缓冲的通道是指在接收前没有能力保存任何值得通道。
这种通道进行发送和接收的交互行为本身就是同步的。其中任意一个操作
都无法离开另一个操作单独存在。
*/
package main
import (
"fmt"
"time"
)
func main(){
//创建一个无缓冲的channel
ch:=make(chan int,0)
fmt.Printf("len(ch)=%d,cap(ch)=%d\n",len(ch),cap(ch))
//新建协程
go func(){
for i:=0;i<4;i++{
fmt.Println("one=",i)
ch<-i//放入后,满了阻塞在此,不会继续执行;待为0时,再继续执行
fmt.Printf("len(ch)=%d,cap(ch)=%d\n",len(ch),cap(ch))
}
}()
//延迟2s
time.Sleep(time.Second*2)
for j:=0;j<4;j++{
num:=<-ch
fmt.Println("recevie one=",num)
}
/**
输出:
F:\goWorkSpace\study\05协程>go run 12_无缓冲的channel.go
len(ch)=0,cap(ch)=0
one= 0
recevie one= 0
len(ch)=0,cap(ch)=0
one= 1
len(ch)=0,cap(ch)=0
one= 2
recevie one= 1
recevie one= 2
len(ch)=0,cap(ch)=0
one= 3
len(ch)=0,cap(ch)=0
recevie one= 3
*/
}
5.12 go 无缓冲的channel
猜你喜欢
转载自blog.csdn.net/h4241778/article/details/105374410
今日推荐
周排行