摘要: atomic.CompareAndSwapInt64 汇编 ​​ 这段代码稍微有些复杂, 我们来慢慢的分析 ​MOVQ $0x1, 0(AX)​ 这一步是为了给i​赋值 ​MOVQ AX, CX​ 将i​的地址传入了CX​寄存器 ​MOVL $0x2, AX​ 将 立即数2​ 存入AX​寄存器, A 阅读全文
posted @ 2024-03-30 15:34 pDJJq 阅读(27) 评论(0) 推荐(0)
摘要: atomic.SwapInt64 汇编 不再浪费时间去找源码了, 因为atomic这部分的实现全部都依赖于底层的汇编指令 ​​ 会发现一件事情, 那就是这里的实现和Store是几乎一致的, 为什么呢? 原因出在XCHG XCHG ​XCHG​ 是x86架构汇编语言中的一条指令,它的全称是“Excha 阅读全文
posted @ 2024-03-30 15:34 pDJJq 阅读(47) 评论(0) 推荐(0)
摘要: 该文章介绍了Go语言中atomic.StoreInt64函数的底层实现。通过汇编指令XCHG来实现原子性地修改存储的值,展示了底层结构对上层建筑的影响。XCHG指令在多线程编程中具有重要作用,但在一些旧计算机上性能不佳。 阅读全文
posted @ 2024-03-30 15:34 pDJJq 阅读(38) 评论(0) 推荐(0)
摘要: LoadInt64函数实际上是通过寻址来获取最新的值,寻址操作的本质即间接引用存储地址。在当前计算机体系下,并发更多是由写操作引起,而读操作通常不存在并发冲突。 阅读全文
posted @ 2024-03-30 15:33 pDJJq 阅读(37) 评论(0) 推荐(0)
摘要: 前言 在atomic中, 常用的有这么几类操作 Add: 增加值 CAS: 比较, 如果old符合预期就替换为new Load: load当前最新的值 Store: 将当前值直接写入到内存中 需要注意的是, 以上操作全部都是原子性的. 对于指令来说, 是不区分类型的, 只区分位数, 而32位只是64 阅读全文
posted @ 2024-03-30 15:28 pDJJq 阅读(15) 评论(0) 推荐(0)