交替打印-GO
创始人
2025-01-15 05:03:35
0

1 两个channel 版本

package main  import ("fmt" 	   "sync")  var wg sync.WaitGroup var c1 chan int var c2 chan int  func A(){ 	defer wg.Done() 	for i:=0;i<10;i++ { 		<-c1 		fmt.Println(2*i) 		c2<-1            //牵引协程 	} } func B(){ 	defer wg.Done() 	for i:=0;i<10;i++ { 		<-c2 		fmt.Println(2*i+1) 		c1<-1 	} } func main () { 	wg = sync.WaitGroup{}  //初始化 	c1 = make(chan int, 1)  //有缓存,不然会死锁 	c2 = make(chan int) 	wg.Add(2) 	 	go A()   //协程执行函数 	go B() 	 	c1<-1      //启动协程 	wg.Wait() 	 	fmt.Println("hello https://tool.lu/") } 

无缓冲的通道(unbuffered channel)是指在接收前没有能力保存任何值的通道。
这种类型的通道要求发送 goroutine 和接收 goroutine同时准备好,才能完成发送和接收操作。

如果都使用无缓冲通道,需要小修一下B()函数,避免死锁。
package main  import ("fmt" 	   "sync")  var wg sync.WaitGroup var c1 chan int var c2 chan int  func A(){ 	defer wg.Done() 	for i:=0;i<10;i++ { 		<-c1 		fmt.Println(2*i) 		c2<-1 	} } func B(){ 	defer wg.Done() 	for i:=0;i<10;i++ { 		<-c2 		fmt.Println(2*i+1) 		if i < 9 {   //临结束时候,不再写入 			c1<-1 		} 	} } func main () { 	wg = sync.WaitGroup{} 	c1 = make(chan int) 	c2 = make(chan int) 	wg.Add(2) 	 	go A() 	go B() 	 	c1<-1 	wg.Wait() 	 	 	fmt.Println("hello https://tool.lu/") } 

2  1个通道版本

  • 奇偶打印条件过滤
  • 管道自牵引
package main  import ("fmt" 	   "sync")  var wg sync.WaitGroup var c1 chan int  func A(){ 	defer wg.Done() 	for i:=0;i<10;i++ { 		<-c1 		if i%2 == 0 { 			fmt.Println(i) 		} 	} } func B(){ 	defer wg.Done() 	for i:=0;i<10;i++ { 		c1<-1 		if i%2 == 1 { 			fmt.Println(i) 		} 	} } func main () { 	wg = sync.WaitGroup{} 	c1 = make(chan int) 	wg.Add(2)  	go A() 	go B()  	wg.Wait()  	fmt.Println("hello https://tool.lu/") }

3 不使用 channel

package main  import ("fmt" 	   "sync")  var wg sync.WaitGroup var i int  func A(){ 	defer wg.Done() 	for ;i<10; {  		if i%2 == 0 { 			fmt.Println(i) 			i++ 		} 	} } func B(){ 	defer wg.Done() 	for ;i<10; {  		if i%2 == 1 { 			fmt.Println(i) 			i++ 		} 	} } func main () { 	wg = sync.WaitGroup{} 	i = 0 	wg.Add(2)  	go A() 	go B()  	wg.Wait()  	fmt.Println("hello https://tool.lu/") }

相关内容

热门资讯

第八阶段知晓“堆金城陕西辅助器... 第八阶段知晓“堆金城陕西辅助器”原先有开挂辅助下载(的确有挂);无需打开直接搜索加(薇:136704...
第3分钟资料!微信雀神挂件辅助... 您好:微信雀神挂件辅助器这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的...
第十小时晓得“中至辅助”往昔有... 第十小时晓得“中至辅助”往昔有开挂辅助挂(有挂分享);无需打开直接搜索打开薇:136704302 咨...
三分钟操作!微乐小程序破解(透... 三分钟操作!微乐小程序破解(透视)先锋脚本辅助(有挂头条);无需打开直接搜索打开薇:13670430...
2小时知晓“新九哥智能辅助软件... 2小时知晓“新九哥智能辅助软件”先前有开挂辅助脚本(有挂方针)1、下载安装好新九哥智能辅助软件,进入...
三分钟项目!微乐自建房脚本免费... 三分钟项目!微乐自建房脚本免费下载入口(透视)小程序雀神雀神智能插件(确实有挂)1、下载安装好微乐自...
9分钟精通“决战卡五星游戏辅助... 您好:决战卡五星游戏辅助器这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户...
十分钟模块!微信小程序微乐房间... 十分钟模块!微信小程序微乐房间有挂吗(透视)雀神挂件怎么安装(有挂方针);无需打开直接搜索打开薇:1...
3瞬间精通“优优乐暗宝源码”往... 3瞬间精通“优优乐暗宝源码”往昔有开挂辅助平台(果真有挂);无需打开直接搜索加(薇:13670430...
一分钟方式!新九游辅助软件(透... 您好:新九游辅助软件这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特...