Instead of inventing something weird looking I'd better take a closer look
at
what happens in Java 8 and 9.

For example in Java 8 there is already a method AtomicLong.getAndUpdate[1]
(paired
with updateAndGet of course) which provides the needed semantics.
We can implement it reusing known current value if CAS failed.

[1]
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html#getAndUpdate-java.util.function.LongUnaryOperator-

Sergi


2015-09-17 17:20 GMT+03:00 Dmitriy Setrakyan <dsetrak...@apache.org>:

> On Thu, Sep 17, 2015 at 4:19 PM, Pavel Tupitsyn <ptupit...@gridgain.com>
> wrote:
>
> > Hi,
> >
> > Looking at other methods in IgniteAtomicLong, it would be
> > compareAndSetAndGet. Ugly, but consistent.
> >
>
> Agree.
>
>
> >
> > On Thu, Sep 17, 2015 at 3:36 PM, Vladimir Ozerov <voze...@gridgain.com>
> > wrote:
> >
> > > Igniters,
> > >
> > > As we know Java implementation of atomics are rather limited because it
> > > cannot return current value in case of failed CAS. Other modern
> platforms
> > > like .Net, WinAPI and GCC have this feature.
> > >
> > > We can easily implement this method because we have old value in hands
> > > during distributed CAS. But how to name it?
> > >
> > > - long compareAndSetValue(long, long)?
> > > - compareAndSetReturnValue(long, long)?
> > >
> > > Please share your ideas.
> > >
> > > For examples, GCC goes this way:
> > > __sync_*bool*_compare_and_set
> > > __sync_*val*_compare_and_set
> > >
> > > Vladimir.
> > >
> >
> >
> >
> > --
> > --
> > Pavel Tupitsyn
> > GridGain Systems, Inc.
> > www.gridgain.com
> >
>

Reply via email to