[jmm-dev] weakCompareAndSet memory semantics
    Andrew Haley 
    aph at redhat.com
       
    Thu Apr 21 07:52:44 UTC 2016
    
    
  
On 21/04/16 00:10, David Holmes wrote:
> On 21/04/2016 8:59 AM, Justin Sampson wrote:
>> David Holmes wrote:
>>
>>> Side question: why would you replace compareAndSet with
>>> weakCompareAndSet when that would expose those ll/sc spurious
>>> failures?
>>
>> The spurious failures are irrelevant because the whole thing is
>> wrapped in a retry loop anyway.
> 
> And in the compareAndSet the spurious failures never escape because it 
> also has a retry loop. So my question stands: why would you switch to 
> weakCompareAndSet in "busy loops" and how would this be a benefit?
Say you're incrementing a heavily-contended counter.  There's no point
spinning in a loop if the store fails or if there is a spurious failure.
You want to do this:
loop:
    ldax x0, [addr]
    add x0, x0, #1
    stlx status, x0, [addr]
    cbnz status, loop
You can simulate this with weakCompareAndSet.
Andrew.
    
    
More information about the jmm-dev
mailing list