協程配合管道的綜合案例

package main

import (
“fmt”
“time”
)

/*
應用實例1
請完成goroutine和channel協同工作的案例,具體要求:
1)開啓一個writeData協程,向管道intChan中寫入50個整數。
2)開啓一個readData協程,從管道intChan中讀取writeData寫入的數據。
3)注意:writeData和readData操作的時同一個管道
4)主線程需要等待writeData和readData協程都完成工作才能退出

思路分析:

看代碼演示:
*/
//write Data,寫一個協程
func writeData(intChan chan int){
for i:=1;i<=50;i++{
//放入數據
intChan<-i
fmt.Println(“writeData”,i)
time.Sleep(time.Second)
}
close(intChan)//循環寫入,寫入50個數據後,自動關閉
}
//寫另外一個協程read data
func readData(intChan chan int,exitChan chan bool){
//關閉後開始循環讀取,
for{
v,ok:=<-intChan
if !ok{
break
}
time.Sleep(time.Second)
fmt.Printf(“readData 讀到數據=%v\n”,v)
}
//readData讀取完數據後,即任務完成
exitChan<-true
close(exitChan)
}

func main(){
//創建兩個管道
intChan:= make(chan int,50)
exitChan:=make(chan bool,1)

go writeData(intChan)
go readData(intChan,exitChan)

time.Sleep(time.Second*10)

for{
	_,ok:=<-exitChan
	if!ok{
		break
	}
}

}
/*
1)啓動一個協程,將1-2000的數放入到一個channel中,比如numChan
2)啓動各個協程,從numChan取出數(比如n),並計算1+…+n的值,並存放到resChan
3)最後8個i而成協同完成工作後,再遍歷resChan,顯示結果{如 res[1]=1…res[10]=55…
4)注意:考慮resChan chan int是否合適?

作業2
要求:
1)開一個協程writeDataTofile,隨機生成1000個數據,存放到文件中
2)當writeDataFile完成寫1000個數據到文件後,讓sort協程從文件中讀取1000個文件,
3)考察點:協程和管道+文件的綜合使用
4)功能拓展開10個協程writeDataTofile,每隔協程隨機生成1000個數據,存放到10個文件
5)當10個文件都生成了,讓10個sort協程從10文件中讀取1000個文件,並完成排序重新寫入到10個結果文件。
*/

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