On 01/22/2016 04:51 AM, Andrew Haley wrote:
On 22/01/16 00:01, Vitaly Davidovich wrote:I think the get/setOpaque methods need a bit more explanation ("opaque" is an odd naming choice, IMO). Specifically, it says the operations are done in program order but have no effect on inter-thread ordering/visibility. Is this spec verbiage for a full compiler-only fence?
Basically yes. It would be the same as C "volatile" (not C++/C11 "atomic"), if C volatile had a memory model spec. But in any case we can't use "volatile" for this in Java because it already means something else.
It's like C++ memory_order_relaxed, I guessed. I understand that but not "opaque".
The new name is required because opaque is only "like" C++ memory_order_relaxed. See the jmm-dev list discussions last year for details, but annoyingly, Java normal variables and C++ memory_order_relaxed are not quite the same, and neither are the same as C-volatile/opaque. -Doug
