zoukankan      html  css  js  c++  java
  • golang两个协程交替打印1-100的奇数偶数

    golang两个协程交替打印1-100的奇数偶数

    解法1: 两个管道实现

    奇偶携程各自的管道,在收到通知后输出,然后通过对方管道通知对方输出

    func main() {
    
    	ch0 := make(chan int)
    	ch1 := make(chan int)
    
    	go func() {
    		for i := 1; i < 10; i += 2 {
    			<-ch0
    			fmt.Println(i)
    			ch1 <- 0
    		}
    	}()
    
    	go func() {
    		for i := 2; i < 10; i += 2 {
    			<-ch1
    			fmt.Println(i)
    			ch0 <- 0
    		}
    	}()
    
    	ch0 <- 0
    
    	select {}
    }
    

    解法2: 一个管道

    0空间的channel会阻塞发送/接收双发,直到发送/接收双发同时就绪。
    所以,可以达到控制两个协程,按照相同的步调执行。
    即使,控制协程相同步调运行,还是不能控制交替打印输出。
    因此,不能在步调同步后,都有输出。
    所以,在步调相同之后,让该输出的协程输出,不该输出的协程不输出,始终有一个协成输出。

    func main0() {
    
    	ch := make(chan int)
    
    	go func() {
    		for i := 1; i < 10; i += 1 {
    			<-ch
    			if i%2 == 0 {
    				fmt.Println(i)
    			}
    		}
    	}()
    
    	go func() {
    		for i := 1; i < 10; i += 1 {
    			ch <- 0
    			if i%2 == 1 {
    				fmt.Println(i)
    			}
    		}
    	}()
    
    	select {}
    }
    
  • 相关阅读:
    Java基础五
    Java基础测试
    Java练习题
    Java基础四
    Java基础三
    Java基础二
    Java基础一
    大数据讲解
    python笔记之函数 二
    iOS UICollectionView的使用(用storyboard和xib创建)
  • 原文地址:https://www.cnblogs.com/vc60er/p/13798560.html
Copyright © 2011-2022 走看看