File tree 1 file changed +43
-4
lines changed
1 file changed +43
-4
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ package main
2
2
3
3
import (
4
4
"fmt"
5
+ "sync"
5
6
)
6
7
7
8
func main () {
@@ -115,11 +116,49 @@ func main() {
115
116
//ch5 <- true
116
117
//fmt.Println(<-ch5)
117
118
118
- ch6 := make (chan bool , 1 )
119
- ch6 <- true
120
- ch6 <- false
121
- fmt .Println (<- ch6 ) //fatal error: all goroutines are asleep - deadlock!
119
+ // ch6 := make(chan bool, 1)
120
+ // ch6 <- true
121
+ // ch6 <- false
122
+ // fmt.Println(<-ch6) //fatal error: all goroutines are asleep - deadlock!
122
123
124
+ /*
125
+ waitgroup 等待一组任务结束,再执行其他业务逻辑
126
+
127
+ Add() 初始值是0,累加子协程的数量。
128
+ Done() 当某个子协程完成后,计数器减去1,通常用defer调用。
129
+ Wait() 阻塞当前协程,直到实例中的计数器归零。
130
+ */
131
+
132
+ //isDone := make(chan bool)
133
+ //go func() {
134
+ // for i := 0; i < 5; i++ {
135
+ // fmt.Println(i)
136
+ // }
137
+ // isDone <- true
138
+ //}()
139
+ //
140
+ //<-isDone
141
+ //fmt.Println("main goroutine finished")
142
+
143
+ //初始化sync.WaitGroup
144
+ var wg sync.WaitGroup
145
+ //传入子协程的数量
146
+ wg .Add (3 )
147
+ //开启子协程1
148
+ go DoTask (1 , & wg )
149
+ //开启子协程2
150
+ go DoTask (2 , & wg )
151
+ //开启子协程3
152
+ go DoTask (3 , & wg )
153
+ //阻塞当前协程,等待所有子协程完成任务
154
+ wg .Wait ()
155
+ }
156
+
157
+ func DoTask (taskNum int , wg * sync.WaitGroup ) {
158
+ defer wg .Done ()
159
+ for i := 0 ; i < 3 ; i ++ {
160
+ fmt .Printf ("task: %d: %d\n " , taskNum , i )
161
+ }
123
162
}
124
163
125
164
func funcReceiver (c chan bool ) {
You can’t perform that action at this time.
0 commit comments