【英文】Go语言协程之间的同步

Preface

Go language achieves synchronization between goroutines through sync.WaitGroup.

Body

  • defer waitGroup.Done() is equivalent to defer waitGroup.Add(-1).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import "sync"

var waitGroup sync.WaitGroup

func task() {
// Decrease waitGroup by 1 every time a goroutine is completed
defer waitGroup.Done()
...
}

func main() {
for i := 0; i < 3; i++ {
go task()
// Increase waitGroup counter by 1 every time a goroutine is created
waitGroup.Add(1)
}
// Wait for all goroutines in waitGroup to complete
waitGroup.Wait()
}

Completion

References

Bilibili - Guo Hongzhi - Lao Guo