Golang 并发编程详解
package main
import (
"fmt"
"sync"
"sync/atomic"
"time"
)
func main() {
var (
wg sync.WaitGroup
counter int32 = 0
)
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for count := 0; count < 10; count++ {
// 使用原子操作来递增counter
atomic.AddInt32(&counter, 1)
time.Sleep(time.Millisecond * 100)
}
}()
}
wg.Wait() // 等待所有goroutine完成
// 输出counter的最终值,应该为1000
fmt.Println("Counter value:", counter)
}
这段代码使用了sync
和sync/atomic
包来处理并发问题。它创建了10个goroutines,每个goroutine都会原子性地递增一个32位整数计数器10次。主goroutine使用sync.WaitGroup
来等待所有的辅助goroutines完成。最后,主goroutine打印出计数器的最终值,验证是否正确地进行了并发操作。
评论已关闭