/
2a.go
61 lines (52 loc) · 867 Bytes
/
2a.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package main
import (
"fmt"
"github.com/juragan360/concurrency/fibo"
"time"
)
func main() {
iteration := 100
fmt.Println("T2 - WaitGroup")
crcvd := make(chan int)
cfibo := make(chan fibo.F)
cdone := make(chan bool)
go func() {
for {
select {
case i := <-crcvd:
go func(i int) {
cfibo <- GetFibo(i)
}(i)
case f := <-cfibo:
fmt.Printf("Fibo of %d is %d \n", f.Seed, f.Result)
if f.Seed == 99 {
cdone <- true
}
}
}
}()
tstart := time.Now()
for i := 0; i < iteration; i++ {
/*
go func(i int) {
cfibo <- GetFibo(i)
}(i)
*/
crcvd <- i
}
wait := true
for wait {
select {
case <-cdone:
wait = false
}
}
fmt.Printf("Done. Completed in %v \n", time.Since(tstart))
}
func GetFibo(i int) fibo.F {
f := fibo.F{}
f.Seed = i
f.Calc()
time.Sleep(100 * time.Millisecond)
return f
}