在 Golang 中,可以使用一些机制来控制多个协程的同步,例如使用 WaitGroup、Channel 或 Mutex。
- 使用 WaitGroup: “`go import “sync”
func main() {
var wg sync.WaitGroup
// 增加等待的协程数量
wg.Add(2)
go func() {
// 协程逻辑
// ...
// 协程执行完毕,减少等待的协程数量
wg.Done()
}()
go func() {
// 协程逻辑
// ...
// 协程执行完毕,减少等待的协程数量
wg.Done()
}()
// 等待所有协程完成
wg.Wait()
}
2. 使用 Channel:
```go
func main() {
ch := make(chan bool)
go func() {
// 协程逻辑
// ...
ch <- true
}()
go func() {
// 协程逻辑
// ...
ch <- true
}()
for i := 0; i < 2; i++ {
<-ch // 阻塞等待接收到两个数据后继续执行下面的代码
}
}
- 使用 Mutex: “`go import “sync”
var mu sync.Mutex
func main() { var count int
go func() { mu.Lock() defer mu.Unlock()
count++ }()
go func() { mu.Lock() defer mu.Unlock()
count– }()
// 等待协程执行完毕
time.Sleep(time.Second)
fmt.Println(count) // 输出结果为0
} “`
以上是一些常见的方式,可以根据具体情况选择合适的同步机制来控制多个协程的同步。
内容由零声教学AI助手提供,问题来源于学员提问




