[cpp-threads] modes, pass 2
Alexander Terekhov
alexander.terekhov at gmail.com
Wed May 11 16:05:53 BST 2005
On 5/11/05, Doug Lea <dl at cs.oswego.edu> wrote:
[...]
> 3. I still think isync works as LoadLoad barrier.
>
> > . consumer spins on the flag until it is reset
> >> . consumer executes an "isync" to discard any subsequent speculative
> >> memory reads
> >> . consumer reads the data
>
> Please tell me which of these things I got wrong :-)
1 and 2 aside for a moment, 3 is surely wrong. AFAICS.
"consumer spins on the flag until it is reset" implies load-CRO->
branch thing. Placing isync after that loop has the effect of
load.acq for flag load in Itanic speak. Without that control
dependency (note that it orders subsequent stores on its own even
without isync), isync doesn't order anything at all since it
doesn't prevent sinking (apart from op governing branching
preceding isync): <quote source=BOOK2> The isync instruction may
complete before storage accesses associated with instructions
preceding the isync instruction have been performed."
Now please tell me what I got wrong. ;-)
regards,
alexander.
More information about the cpp-threads
mailing list