java - 在 AtomicInteger.incrementAndGet() 的 CompareAndSwap 中比较比较什么?
问题描述
我知道 CompareAndSwap 在 java 并发中的 AtomicInteger.incrementAndGet() 等方法的引擎盖下使用,它像无限循环一样工作,直到它成功并阻止它的线程
它将内存位置的内容与给定值进行比较,并且仅当它们相同时,才将该内存位置的内容修改为新的给定值。这是作为单个原子操作完成的。原子性保证了新值是根据最新信息计算出来的;如果同时该值已被另一个线程更新,则写入将失败。操作的结果必须表明它是否执行了替换;这可以通过简单的布尔响应(此变体通常称为比较和设置)或通过返回从内存位置读取的值(而不是写入其中的值)来完成。
那么,incrementAndGet() 中内存位置的给定值和内容是什么?
解决方案
当一个线程看到当前值时,例如 ,1
然后将其递增2
为given value
,并与2
当前时刻内存中的实际值进行比较。
如果成功,2
将被退回。
否则,它将检索最新的值,比如说它x
,并递增到x + 1
给定的值。
...
此过程将继续进行,直到成功比较。
推荐阅读
- google-cloud-platform - GCE 入口健康检查在 kubernetes 上失败
- android - 在尝试检索图像时获取类未找到异常以及无法解码流异常
- ios - 如何在目标 c 中设备旋转后更新 Web 视图宽度?
- c++ - 如何存储具有多个空格的字符串c ++
- java - 警报 Dialog.Builder(??)
- go - 返回 nil 结构而不是空结构 go-gorm
- ios - 此 iPhone 运行 iOS 12.0 (16A366),此版本的 Xcode 可能不支持
- android - 在调试模式下更新 Firebase Analytics 中的 UserProperties
- amazon-web-services - 通过 AWS 请求 ID 获取请求参数
- django-viewflow - 跳转到上一个任务导致任务没有 flow_task 和进程