[Go] golang原子函数锁住共享资源
程序员文章站
2023-10-11 20:53:28
1.atomic包里的几个函数以及sync包里的mutex类型,提供了解决方案2.原子函数能够以很底层的加锁机制来同步访问整型变量和指针3.atomic.AddInt64(&counter, 1)的原理是强制同一时刻只能有一个goroutine运行并完成这个加法操作 ......
1.atomic包里的几个函数以及sync包里的mutex类型,提供了解决方案
2.原子函数能够以很底层的加锁机制来同步访问整型变量和指针
3.atomic.addint64(&counter, 1)的原理是强制同一时刻只能有一个goroutine运行并完成这个加法操作
package main
import (
"fmt"
"runtime"
"sync"
"sync/atomic"
)
var (
//全局变量
counter int64
//计数信号量
wg sync.waitgroup
)
func main() {
fmt.println("hello")
//计数加2,等待两个goroutine
wg.add(2)
go inccounter()
go inccounter()
//主goroutine等待子goroutine结束
wg.wait()
fmt.println("最终counter值:", counter)
}
//增加counter的值函数
func inccounter() {
//函数结束,减小信号量
defer wg.done()
for count := 0; count < 2; count++ {
//安全的对counter加1
atomic.addint64(&counter, 1)
//强制调度器必须切换
runtime.gosched()
}
}
上一篇: 一个克服怕鬼的方法
下一篇: 后周王峻从艺人起家最后当上重臣的人