package main
import (
"fmt"
"time"
"math/rand"
)
func Func1(ch chan int) {
for{
num := time.Duration(1)
i := <-ch
fmt.Printf("[Func1] waiting %d seconds. ",num)
fmt.Printf("ch %d\n",i)
time.Sleep(num*time.Second)
}
}
func Func2(ch chan int){
for {
num := time.Duration(3)
i := <-ch
fmt.Printf("[Func2] waiting %d seconds. ",num)
fmt.Printf("ch %d\n",i)
time.Sleep(num*time.Second)
}
}
func main(){
rand.Seed(time.Now().UnixNano())
ch := make(chan int)
go Func1(ch)
go Func2(ch)
for i:=0; i<10; i++ {
ch <- i
}
}
[Func2] waiting 3 seconds. ch 0
[Func1] waiting 1 seconds. ch 1
[Func1] waiting 1 seconds. ch 2
[Func1] waiting 1 seconds. ch 3
[Func2] waiting 3 seconds. ch 4
[Func1] waiting 1 seconds. ch 5
[Func1] waiting 1 seconds. ch 6
[Func1] waiting 1 seconds. ch 7
[Func2] waiting 3 seconds. ch 8
[Func1] waiting 1 seconds. ch 9