VarHandles & LMAX Disruptor
David M. Lloyd
david.lloyd at redhat.com
Tue Jul 28 15:35:04 UTC 2015
On 07/28/2015 10:28 AM, Kirk Pepperdine wrote:
>
> On Jul 28, 2015, at 4:56 PM, Vitaly Davidovich <vitalyd at gmail.com> wrote:
>
>> I'll second Mike's suggestion of having VarHandle method names reflect
>> their memory ordering effects, although I don't know if I'd want get/set to
>> use the default based on the presence/absence of volatile modifier. If the
>> API were to expose all supported flavors of ordering, it'd be nice if *all*
>> read/write ops had the effect in the method name.
>
> Absolutely, it will have a tremendous positive impact on the readability of the code.
I agree - VarHandles by nature represent a move away from having "kinds"
of variables towards instead having "kinds" of access. No need to muddy
those waters with a needless default (under what circumstances would
that be useful I wonder?).
>
> Regards,
> Kirk
>
>>
>> On Tue, Jul 28, 2015 at 10:24 AM, Paul Sandoz <paul.sandoz at oracle.com>
>> wrote:
>>
>>>
>>> On 27 Jul 2015, at 23:04, Michael Barker <mikeb01 at gmail.com> wrote:
>>>
>>>> On 28 July 2015 at 02:32, Brian Goetz <brian.goetz at oracle.com> wrote:
>>>>
>>>>> - I think VarHandle.set/get should be called
>>>>>> setRelaxed/getRelaxed as
>>>>>> it> would make it more obvious to a user and a reader what those
>>>>>> methods are> going to do. My initial assumption was that they
>>>>>> were
>>>>>> no different from a> normal write/read of a field.
>>>>>>
>>>>>> An alternative here is that get/set does whatever the default is for
>>>>>> that field (so a volatile field would get ordered access) and
>>>>>> {get,set}Relaxed would force a relaxed access (even for volatile
>>>>>> fields.)
>>>>>>
>>>>>> That would make sense, however it would preclude the ability to apply a
>>>>>> normal load/store to volatile field.
>>>>>>
>>>>>
>>>>> Sorry, I wasn't clear. "Alternative" applied to "get rid of get/set"
>>>>> within the context of having an explicit {set,get}Relaxed. In other
>>> words,
>>>>> have getters/setters for all the modes, and then define "naked" get/set
>>> to
>>>>> mean "whatever is default for this variable.
>>>>>
>>>>
>>>> If VarHandles supported all access modes (Volatile, Acq/Rel, Relaxed and
>>>> Normal) with explicit calls and provided "naked" get/set as a default
>>> based
>>>> on the absence/presence of the volatile modifier then that would make
>>> for a
>>>> nice, complete API.
>>>>
>>>
>>> I think that’s a good suggestion, worth adding. Stay tuned.
>>>
>>> Paul.
>>>
>>>
>
--
- DML
More information about the valhalla-dev
mailing list