有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件1234
说明:
文件1输出:123412341234
文件2输出:234123412341
文件3输出:341234123412
文件4输出:412341234123
package main
import (
"fmt"
"os"
"time"
)
type FS struct{
f *os.File
next int
}
func putData(c chan int, data int){
for{
c<-data
}
}
func main(){
var ch [4](chan int)
for i:=0; i<=3; i++{
ch[i] = make(chan int ,128)
}
for i:=0; i<=3; i++{
go putData(ch[i], i)
}
var fs [4]FS
for i:=0; i<=3; i++{
if f, err := os.Create(fmt.Sprintf("%d", i+1)); err == nil{
fs[i] = FS{f, i}
}else{
fmt.Println(err)
}
}
defer func() {
for i:=0; i<=3; i++{
fs[i].f.Close()
}
}()
for {
var data int
for i:=0; i<=3; i++{
select {
case data=<-ch[i]:
fmt.Println("get data : ", data+1)
case <-time.After(time.Second*3):
continue
}
for j:=0; j<=3;j++{
if data == fs[j].next{
if _,err := fs[j].f.WriteString(fmt.Sprintf("%d", data+1));err ==nil{
fmt.Println("weite data : ", data+1)
if fs[j].next == 3{
fs[j].next = 0
}else {
fs[j].next = fs[j].next % 3 + 1
}
}else{
fmt.Println(err)
}
}
}
}
time.Sleep(time.Second)
}
}