[jvm-l] Re: request for advice: safepoints in the JSR 292 spec
Rich Hickey
richhickey at gmail.com
Wed Dec 15 13:03:29 PST 2010
On Dec 15, 2010, at 3:08 PM, John Rose wrote:
> On Dec 15, 2010, at 7:04 AM, Rémi Forax wrote:
>
>>>> default generic method (reader):
>>>> synchonized(masterLock) {
>>>> // check arguments
>>>> // use meta data to create a fast path
>>>> }
>>> (This next line should also be synchronized. -- JRR)
>>>
>>>> setTarget(guard + fastpath);
>>
>> Correct me if I'm wrong.
>> Le last line can be in the synchronized block but it don't have to.
>> The JMM guarantees that the current thread will see the new target
>> (T2).
>> Other threads can see T1 and in that case will update to a T2'
>> which is
>> semantically equivalent to T2.
>> It's a racy update.
>
> Racy updates have the risk of not getting picked up by Slow Reader
> threads.
>
> But, as you point out, in this case T1 synchronizes any Slow Reader
> and forces him to see T2.
>
> So, you're right.
>
> I guess the principle is that racy updates are OK as long as the
> previous state (T1) is allowed and will eventually force all readers
> to go to the new state (T2).
>
Why can't T3 happen between the synchronized block and the setUpdate
call, and get overwritten with a T1-based decision?
Rich
More information about the mlvm-dev
mailing list