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 {}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM