什么是CAS?
CAS叫做CompareAndSwap,比较并交换,主要是通过处理器的指令来保证操作的原子性。
CAS的原理是什么?
CAS包含三个操作数:
1. 变量内存地址,V表示
2. 旧的预期值,A表示
3. 准备设置的新值,B表示
当执行CAS指令时,只有当V等于A时,才会用B去服务器托管网更新V的值,否则就不会执行更新操作。
CAS的缺点
CAS的缺点主要有3点:
ABA问题:ABA的问题指的是在CAS更新的过程中,当读取到的值是A,然后准备赋值的时候仍然是 A,但是实际上有可能A的值被改成了B,然后又被改回了A,这个CAS更新的漏洞就叫做ABA。只是 ABA的问题大部分场景下都不影响并发的最终效果。
Java中有AtomicStampedReference来解决这个问题,他加入了预期标志和更新后标志两个字段,更新时不光检查值,还要检查当前的标志是否等于预期标志,全部相等的话才会更新。
循环时间长开销大:自旋CAS的方式如果长时间不成功,会给CPU带来很大的开销。
只能保证一个共享变量服务器托管网的原子操作:只对一个共享变量操作可以保证原子性,但是多个则不行,多个可以通过AtomicReference来处理或者使用锁synchronized实现。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 【Azure 媒体服务】Media Service的编码示例 — 创建缩略图子画面的.NET代码调试问题
问题描述 在中国区Azure上,使用Media Service服务,想要使用.NET的代码来对上传视频创建缩略图(Thumbnail) 。 通过官网文档(https://docs.azure.cn/zh-cn/media-services/latest/sam…