【问题标题】:what does Compare compare at CompareAndSwap at AtomicInteger.incrementAndGet()?在 AtomicInteger.incrementAndGet() 的 CompareAndSwap 中比较是什么?
【发布时间】:2018-10-01 11:25:46
【问题描述】:

我知道 CompareAndSwap 是在 java 并发中的 AtomicInteger.incrementAndGet() 等方法的引擎盖下使用的,它像无限循环一样工作,直到它成功并阻塞它的线程

它将内存位置的内容与给定值进行比较,并且, 仅当它们相同时,才修改该内存的内容 位置到一个新的给定值。这是作为单个原子完成的 手术。原子性保证计算新值 基于最新信息;如果该值已由 与此同时,另一个线程,写入将失败。的结果 该操作必须表明它是否执行了替换; 这可以通过一个简单的布尔响应来完成(这个变体 通常称为比较和设置),或者通过返回从 内存位置(不是写入它的值)。

那么,incrementAndGet() 中的给定值内存位置的内容是什么?

【问题讨论】:

    标签: java concurrency atomic compare-and-swap


    【解决方案1】:

    当一个线程看到当前值时,例如1,它会将其递增到2作为given value,并将2与当前内存中的实际值进行比较。

    如果成功,将返回2

    否则,它将检索最新的值,假设为x,并递增到x + 1 作为给定值。

    ...

    此过程将一直持续到成功比较为止。

    【讨论】:

    • 你写了“并将 2 与当前内存中的实际值进行比较”,那么 内存中的实际值应该是什么才能满足线程?
    • 2 as given value 是否意味着线程将 2 作为本地副本保存在其注册表中?如果它不稳定怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2016-12-28
    • 2016-11-15
    • 2013-12-17
    相关资源
    最近更新 更多