package main import ( "fmt" ) //讓N個協程交替打印1-100 讓N個協程交替打印1-100 /* 利用緩存通道進行阻塞的傳遞 */ func main() { gorutinenum := 5 var chanslice []chan int exitchan := make(chan int) for i := 0; i < gorutinenum; i++ { chanslice = append(chanslice, make(chan int, 1)) } res := 0 j := 0 for i := 0; i < gorutinenum; i ++ { go func(i int) { for { <-chanslice[i] if res > 100 { exitchan <- 1 break } fmt.Println(fmt.Sprintf("gorutine%v:%v", i, res)) res ++ if j == gorutinenum-1 { j = 0 }else { j ++ } chanslice[j] <- 1 } }(i) } chanslice[0] <- 1 select { case <-exitchan: fmt.Println("end") } }
讓N個協程交替打印1-100
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.