golang 面試題(十)協程交替打印奇偶數

問題:

兩個協程交替打印1-100的奇偶數,一個協程打印奇數,一個協程打印偶數。

 

代碼1:

package main

import (
	"fmt"
	"runtime"
	"time"
)

func main() {
	//設置可同時使用的CPU核數爲1
	runtime.GOMAXPROCS(1)
	go func() {
		for i := 1; i < 101; i++ {
			//奇數
			if i%2 == 1 {
				fmt.Println("線程1打印:",i)
			}
			//讓出cpu
			runtime.Gosched()
		}
	}()
	go func() {
		for i := 1; i < 101; i++ {
			//偶數
			if i%2 == 0 {
				fmt.Println("線程2打印:",i)
			}
			//讓出cpu
			runtime.Gosched()
		}
	}()
	time.Sleep(3 * time.Second)
}

 

代碼2:使用channel

package main

import (
	"fmt"
	"time"
)

func main() {
	c := make(chan int)
	go func() {
		for i := 1; i < 101; i++ {
			c <- 1
			//奇數
			if i%2 == 1 {
				fmt.Println("線程1打印:",i)
			}
		}
	}()
	go func() {
		for i := 1; i < 101; i++ {
			<- c
			//偶數
			if i%2 == 0 {
				fmt.Println("線程2打印:",i)
			}
		}
	}()
	time.Sleep(3 * time.Second)
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章