Golang内存模型与分配机制
package main
import (
"fmt"
"runtime"
"sync"
"sync/atomic"
)
var (
// 使用原子操作保证计数器的线程安全
counter int32
wg sync.WaitGroup
)
func increment() {
// 模拟耗时操作
for i := 0; i < 10000; i++ {
atomic.AddInt32(&counter, 1)
}
wg.Done()
}
func main() {
// 设置Go程的最大数目
runtime.GOMAXPROCS(4)
// 启动4个Go程并发执行increment函数
wg.Add(4)
go increment()
go increment()
go increment()
go increment()
// 等待所有Go程任务完成
wg.Wait()
// 打印最终计数器的值
fmt.Println("Counter:", counter)
}
这段代码使用了sync/atomic
包来处理counter的原子增加操作,确保即使在并发环境下,counter的值也能正确地递增。使用sync.WaitGroup
来同步4个Go程的任务执行。这个例子展示了如何在Go语言中处理并发问题,并保持计数器的线程安全。
评论已关闭