CAS

2019-05-13  本文已影响0人  Jenny的小迷妹啊

1.CAS做了什么?

CAS有三个操作数:内存值V,旧的预期值A,需要修改的新值B
CAS涉及两个步骤:

2.处理器如何实现原子操作?

1.使用总线锁保证原子性
总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占使用共享内存。

缺点: 效率低
原因: 总线锁把CPU和内存之间的通信锁住了,导致锁定期间其他处理器不能操作其他内存地址的数据,所以总线锁定的开销比较大。

2.使用缓存锁保证原子性
缓存锁就是如果缓存在处理器缓存行中内存区域在LOCK操作期间被锁定,那么当它执行锁操作会写内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为缓存一致性机制会组织同时修改由两个以上处理器缓存的内存区域数据,当其他处理器回写已被锁定的缓存行的数据时,会使缓存行无效。

3.CAS缺点

4.ABA问题

如果从内存地址V取值,原来值为A,修改为B,之后又将值修改为A,CAS会认为该值从来没变过。
解决思路:加版本号。

上一篇 下一篇

猜你喜欢

热点阅读