加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – 为什么CompareAndSwap指令被认为是昂贵的?

发布时间:2020-12-14 16:20:22 所属栏目:Java 来源:网络整理
导读:为什么CompareAndSwap指令被认为是昂贵的? 我读了一本书: “记忆障碍是昂贵的,就像 昂贵的原子compareAndSet() 指令.” 谢谢! 解决方法 “CAS”与一般商店没有什么不同,有些关于CAS的错误信息可能来自于在Intel处理器上原来执行的锁:cmpxchg(CAS),锁定:
为什么CompareAndSwap指令被认为是昂贵的?

我读了一本书:

“记忆障碍是昂贵的,就像
昂贵的原子compareAndSet()
指令.”

谢谢!

解决方法

“CAS”与一般商店没有什么不同,有些关于CAS的错误信息可能来自于在Intel处理器上原来执行的锁:cmpxchg(CAS),锁定:前缀导致LOCK#信号被断言,访问公共汽车,这当然没有规模.随后的锁定实现:cmpxchg利用高速缓存一致性协议 – 通常是基于窥探的MESI,而不是断言LOCK#. – David Dice,Biased locking in HotSpot

“Memory barriers are expensive,about as expensive as an atomic compareAndSet() instruction.”

这是真的
例如.在x86上,多处理器系统上的正确CAS具有锁定前缀.
锁前缀导致完整的内存障碍:

“…locked operations serialize all outstanding load and store operations (that is,wait for them to complete).” …”Locked operations are atomic with respect to all other memory operations and all externally visible events. Only instruction fetch and page table accesses can pass locked instructions. Locked instructions can be used to synchronize data written by one processor and read by another processor.” – 07001,Chapter 8.1.2.

实际上,存储器屏障实现为虚拟LOCK OR或LOCK,并且在x86 / x64上的the .NET和the JAVA JIT中实现.
在x86上,CAS导致完整的内存障碍.

在PPC上,它是不同的. LL/SC对 – lwarx & stwcx – 可用于将内存操作数加载到寄存器中,如果目标位置没有其他存储,则将其写回,或者如果存在则重试整个循环. LL / SC可以中断.
它也不意味着一个自动的全屏障.
性能特征和行为在不同架构上可能会有很大差异.
但再次 – weak LL/SC不是CAS.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读