Skip to content

Commit b69a019

Browse files
committed
lesson15
1 parent d22676f commit b69a019

File tree

1 file changed

+43
-4
lines changed

1 file changed

+43
-4
lines changed

lesson15/main.go

+43-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"fmt"
5+
"sync"
56
)
67

78
func main() {
@@ -115,11 +116,49 @@ func main() {
115116
//ch5 <- true
116117
//fmt.Println(<-ch5)
117118

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!
122123

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+
}
123162
}
124163

125164
func funcReceiver(c chan bool) {

0 commit comments

Comments
 (0)