[jmm-dev] jdk9 APIs
dl at cs.oswego.edu
Wed Aug 12 14:38:10 UTC 2015
On 08/12/2015 05:02 AM, Aleksey Shipilev wrote:
> On 08/10/2015 09:22 PM, Doug Lea wrote:
>> boolean compareAndSet(Object owner, T cmp, T val);
>> boolean compareAndSetAcquire(Object owner, T cmp, T val);
>> boolean compareAndSetRelease(Object owner, T cmp, T val);
> Another, perhaps, "can of worms" question about CAS-es that was lurking
> in my mind: which <T>-s are we nominally handling?
The answers need to be a little different for Java and C++.
In C++, you can only apply to "atomic" types.
Under the current VarHandle scheme, you can attach to
anything at compile time, but methods may bail out
throwing an UnsupportedOperationException at run-time.
This will always occur for example when applying getAndAdd
to a VarHandle of any Object type.
This was apparently the tradeoff most acceptable to all concerned.
It means that in addition to memory-model-related specs,
the methods will need to carry warnings that they might
just throw UOE; hopefully enumerating common cases
like CAS for sub-word types and unaligned memory.
> Therefore, the question seems to be the hardware ability to make subword
My understanding (and preference) is that trying to CAS with
VarHandles to bytes and other small types just throws
UOE and should be spec'ed to do so.
More information about the jmm-dev