[Go] golang原子函数锁住共享资源
2023-02-18 15:41:55 时间
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() } }
相关文章
- 【Google Cloud技术咨询】「Contact Center AI」引领我们走向高度智能客服的时代
- 【Git技术专题】如何使用git中的tag进行版本开发控制?
- Golang做一个IM即时通信系统
- 为什么Go的协程调度很快?
- 读猿码系列——1. gRPC+Etcd3的服务发现&负载均衡
- 读猿码系列——3. 从filebeat和go-stash深入日志收集及处理(filebeat篇)
- 读猿码系列——4. 从filebeat和go-stash深入日志收集及处理(go-stash篇)
- 读猿码系列——5.解析Golang常用定时任务库gron和cron
- 读猿码系列——6.Golang中用幂等思路解决缓存击穿的方案:singleflight
- Power BI 按钮:自定义图标
- Power BI x EasyShu:Top商品门店分布地图可视化
- Power BI 按钮:自定义动画
- 什么魔力要你升级到 MONGODB 6.0 (译)
- 1分钟快速生成可视化图:Power BI
- MONGODB 的存储引擎更快,更高,更强的秘诀 --译
- 2022GoLand激活码(2022GoLand最新激活码)2022GoLand激活码
- RSS Can:使用 Golang 实现更好的 RSS Hub 服务(一)
- 当红开发语言Go,真的是未来的技术主流吗?
- Linux系列(42) - 防火墙相关命令
- Nginx系列(7)- Nginx安装 | Linux