我知道CompareAndSwap是在Java并发中像AtomicInteger.incrementAndGet()这样的方法使用的,它就像无休止的循环,直到成功并阻塞了线程为止
它将存储位置的内容与给定值进行比较,并且 仅当它们相同时,才修改该内存的内容 位置到新的给定值。这是作为单个原子完成的 操作。原子性保证新值的计算 基于最新信息;如果值已被更新 与此同时,另一个线程将导致写入失败。的结果 该操作必须表明它是否执行了替换; 这可以通过简单的布尔响应来完成(此变体 通常称为“比较设置”),或者返回从 内存位置(而不是写入的值)。
那么,给定值和内存位置的内容在incrementAndGet()中是什么?
答案 0 :(得分:1)
当一个线程看到当前值时,例如1
,然后将其递增为2
到given value
,并将2
与内存中的实际值进行比较当前。
如果成功,将返回2
。
否则,它将检索最新值,例如x
,并作为给定值增加到x + 1
。
...
此过程将一直持续到成功比较为止。