5.12 canal sin búfer ir

/**
  无缓冲的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
	
	
	*/
}

 

Publicados 134 artículos originales · alabanza won 104 · Vistas a 50000 +

Supongo que te gusta

Origin blog.csdn.net/h4241778/article/details/105374410
Recomendado
Clasificación