Go语言并发编程:数据同步、策略制定与问题处理
1. 使用sync和互斥锁锁定数据
在处理多goroutine甚至多处理器环境下的变量和结构体时,原子数据的概念就显得尤为重要。我们需要确保数据在不同的执行环境中是安全的,而Go语言的 sync 包提供了一系列工具来处理这类问题。
1.1 WaitGroup的使用
WaitGroup 结构体可以让主线程暂停,直到等待的进程完成其任务。以下是一个简单的示例:
package main
import(
"fmt"
"sync"
)
func main() {
current := 0
iterations := 100
wg := new (sync.WaitGroup);
for i := 0; i < iterations; i++ {
wg.Add(1)
go func() {
current++
fmt.Println(current)
wg.Done()
}()
wg.Wait()
}
}
这个示例会在终端输出从0到99的数字。
1.2 并发执行顺序问题
当我们修改 WaitGroup 的使用方式,让它知道会有100个 Done() 调用,并将阻塞代码放在循环末尾时,执行顺序可能会出现问题:
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



