[concurrency-interest] AtomicReference.updateAndGet() mandatory updating

Justin Sampson jsampson at guidewire.com
Wed May 24 15:38:35 EDT 2017

Andrew Haley wrote:
> Mike Duigou wrote:
> > I find that I write a lot of update functions which only occasionally
> > change the value. For these cases I wonder if it would be reasonable to
> > skip the update if the value of next is unchanged from previous.
> I don't think so, because the update has the effect of a volatile
> write. If you skip the update you lose the happens-before ordering
> of that write.

That's strictly true (the memory barriers come out different), but no
algorithm could actually rely on the difference. The reading thread can't
tell if it's reading after the write (and therefore can depend on the
happens-before) or reading before the write (and therefore cannot), since
it sees the same value in either case.

This kind of optimization is already done in some places in the JDK, such
as AtomicStampedReference and AtomicMarkableReference, both of which skip
the write if the current value is already equal to the new value in set(),
compareAndSet(), etc.


More information about the Concurrency-interest mailing list