File tree 2 files changed +70
-0
lines changed
go-routines/workers_final
2 files changed +70
-0
lines changed Original file line number Diff line number Diff line change
1
+ package main
2
+
3
+ import (
4
+ "fmt"
5
+ )
6
+
7
+ func main () {
8
+ s := []string {"a" , "b" , "c" }
9
+ for _ , v := range s {
10
+ go func (v string ) {
11
+ fmt .Println (v )
12
+ }(v )
13
+ }
14
+ select {}
15
+ }
Original file line number Diff line number Diff line change
1
+ package main
2
+
3
+ import "fmt"
4
+
5
+ var N int = 100
6
+ var R int = 100
7
+
8
+ // Task 任务
9
+ func Task (i int ) {
10
+ fmt .Println ("Box" , i )
11
+ }
12
+
13
+ // Workers worker
14
+ func Workers (task func (interface {}), climax func ()) chan interface {} {
15
+ input := make (chan interface {})
16
+ ack := make (chan bool )
17
+ for i := 0 ; i < R ; i ++ {
18
+ go func () {
19
+ for {
20
+ v , ok := <- input
21
+ if ok {
22
+ task (v )
23
+ ack <- true
24
+ } else {
25
+ return
26
+ }
27
+ }
28
+ }()
29
+ }
30
+ go func () {
31
+ for i := 0 ; i < R ; i ++ {
32
+ <- ack
33
+ }
34
+ climax ()
35
+ }()
36
+ return input
37
+ }
38
+
39
+ func main () {
40
+
41
+ exit := make (chan bool )
42
+
43
+ workers := Workers (func (a interface {}) {
44
+ Task (a .(int ))
45
+ }, func () {
46
+ exit <- true
47
+ })
48
+
49
+ for i := 0 ; i < N ; i ++ {
50
+ workers <- i
51
+ }
52
+ close (workers )
53
+
54
+ <- exit
55
+ }
You can’t perform that action at this time.
0 commit comments