WRT to volatile. 

Is there anyway to extend the notion/contract of volatile to access to array 
elements. 

So of course

volatile int[] arr = new int[2];

Just offers the contract to the array reference 'arr'

What about multiple threads wanting some contract between their uses of  arr[1] 
and arr[2]?  

Just thought I would throw this into the mix..
 
Gary
-----Original Message-----
From: core-libs-dev-boun...@openjdk.java.net 
[mailto:core-libs-dev-boun...@openjdk.java.net] On Behalf Of Brian Goetz
Sent: Friday, February 07, 2014 2:45 PM
To: Doug Lea; core-libs-dev
Subject: Re: Draft JEP on enhanced volatiles

It's about time we brought atomic ops out of the shadows of Unsafe and into the 
programming model proper!  It was a good compromise ten years ago to stuff 
these into Unsafe, but its time for these features to grow up.

Specific to this proposal, I like how the VolatileXxx interface approach allows 
us to add new fencing modes and/or atomic operations should we discover that 
the initial set is deficient.  I also like how this potentially gives us a 
consistent story for volatile semantics on array elements.

I can see a clean and straightforward implementation here at all the required 
touch points: language spec, memory model, type system, compiler, and VM 
runtime, and none of them require any special magic. 
(Having spent some time exploring this design space myself, I think the 
proposed surfacing is the least objectionable and most transparent of the 
options that I've seen.)

Minor nits called out inline.

Otherwise, Reviewed (as JDK reviewer) and Endorsed (as area lead).

> We then enable access to corresponding methods for (typically
> volatile) fields using the ".volatile" prefix. For example:

Is this a prefix or a suffix?

> The ".volatile" syntax is slightly unusual, but we are confident that 
> it is syntactically unambiguous and semantically specifiable.

And, it is reasonably consistent with other similar uses of keywords for 
qualifying access to functionality, such as I.super or Outer.this.

> We also expect to allow volatile
> operations on array elements in addition to fields.

This calls for the memory model to provide clear semantics for mixed accesses, 
such as volatile write / nonvolatile read.  (The same would be true if we 
permitted the use of the .volatile modifier on nonvolatile
fields.)
> Several other alternatives
> (including those based on field references) have been raised and 
> dismissed as unworkable on syntactic, efficiency, and/or usability 
> grounds

or extensibility grounds.  Many existing proposals might work for the 
operations in front of us today, but not scale as new fencing modes or atomic 
operations are discovered.

> Risks and Assumptions
> ---------------------
>
> We are confident of feasibility.  However, we expect that it will 
> require more experimentation to arrive at compilation techniques that 
> result in efficient enough implementation for routine use in the 
> performance-critical contexts where these constructs are most often 
> needed. The use of method handles may be impacted by and may impact 
> JVM method handle support.

As a limitation, I'd call out that its not obvious how this would scale to DCAS.

> A large number of usages in java.util.concurrent (and a few elsewhere 
> in JDK) could be simplified and updated to use this support.

Hooray!



Reply via email to