Go原子计数
2016-09-17 08:25
204 查看
发表回复
通过原子计数可以在多线程情况下,对同一个数值进行加减操作,一般用于状态同步。
先看代码:
打印结果类似:
ops: 40200
如果不使用原子计数,直接使用ops =ops+1会导致多线程时计数不准确。
打开Go源码中的atomic包,可以看到相关算法都是用汇编语言写的。所以原子计数执行效率非常高。
本条目发布于2015年10月6日。属于go语言分类。作者是baiyuxiong。
较新文章
→
swift (10)
webos开发 (8)
乱七八糟 (59)
程序设计 (170)
网站制作 (72)
企业微信 查不到该手机号的所属企业 的解决办法
gradle学习总结
关于swift中的强引用 弱引用 无主引用
连接aws ec2提示Operation timed out的解决办法
电子捕鱼器发表在《仿twitter的开源微型博客系统》
捕鱼机发表在《仿twitter的开源微型博客系统》
电鱼机发表在《仿twitter的开源微型博客系统》
捕鱼器发表在《仿twitter的开源微型博客系统》
中式装修
中式装修效果图
代码疯子
寺院装修
果壳博客
文章RSS
评论RSS
WordPress.org
通过原子计数可以在多线程情况下,对同一个数值进行加减操作,一般用于状态同步。
先看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package main import "fmt" import "time" import "sync/atomic" import "runtime" func main() { // 定义一个整数 var ops uint64 = 0 // 使用50个线程给ops累加数值 for i := 0; i < 50; i++ { go func() { for { // 每次加1 atomic.AddUint64(&ops, 1) // 这个函数用于时间片切换 //可以理解为高级版的time.Sleep() //避免前面的for循环将CPU时间片都卡在一个线程里,使得其它线程没有执行机会 runtime.Gosched() } }() } //停一秒,上面50个线程有1秒的执行时间 time.Sleep(time.Second) // 获取结果 opsFinal := atomic.LoadUint64(&ops) fmt.Println("ops:", opsFinal) } |
ops: 40200
如果不使用原子计数,直接使用ops =ops+1会导致多线程时计数不准确。
打开Go源码中的atomic包,可以看到相关算法都是用汇编语言写的。所以原子计数执行效率非常高。
本条目发布于2015年10月6日。属于go语言分类。作者是baiyuxiong。
文章导航
← 早期文章较新文章
→
搜索本站文章
搜索:日志分类
go语言 (76)swift (10)
webos开发 (8)
乱七八糟 (59)
程序设计 (170)
网站制作 (72)
最新文章
记一次诡异的win10 “丢失”文件事件企业微信 查不到该手机号的所属企业 的解决办法
gradle学习总结
关于swift中的强引用 弱引用 无主引用
连接aws ec2提示Operation timed out的解决办法
近期评论
捕鱼器发表在《仿twitter的开源微型博客系统》电子捕鱼器发表在《仿twitter的开源微型博客系统》
捕鱼机发表在《仿twitter的开源微型博客系统》
电鱼机发表在《仿twitter的开源微型博客系统》
捕鱼器发表在《仿twitter的开源微型博客系统》
日志索引
日志索引链接表
IMCN-我是菜鸟中式装修
中式装修效果图
代码疯子
寺院装修
果壳博客
Meta
登录文章RSS
评论RSS
WordPress.org
相关文章推荐
- Go原子计数
- 【并行计算】Linus:为何对象引用计数必须是原子的
- Go语言atomic原子操作
- GO安全并发之无锁原子操作
- LINUS:为何对象引用计数必须是原子的
- 集群环境中利用Memcached CAS原子操作计数
- [充电]多线程无锁编程--原子计数操作:__sync_fetch_and_add等12个操作
- 【Linux】多线程无锁编程--原子计数操作:__sync_fetch_and_add等12个操作
- win32的计数增减操作的原子操作--InterLockedIncrement和InterlockedDecrement
- Linus:为何对象引用计数必须是原子的
- Linus:为何对象引用计数必须是原子的
- lintcode&九章算法——Google面试题:原子计数
- 原子计数【转】
- go-互斥锁及原子函数
- win32的计数增减操作的原子操作--InterLockedIncrement和InterlockedDecrement
- golang 原子计数,互斥锁,耗时
- 多线程无锁编程--原子计数操作:__sync_fetch_and_add等12个操作
- go语言原子操作atomic
- Java 并发包之线程池和原子计数