+Dima

вс, 10 мая 2015, 8:50, Dean McNamee <de...@chromium.org>:

> Just to put this specific issue to a close, maybe some of the analysis
> people could share their thoughts.  Would hate to hang up this patch
> on a broader question about undefined behaviour in general, and try to
> only declare something wrong here if there is an articulable concern
> about this specific data access.
>
> On Fri, May 8, 2015 at 9:18 PM, Matthew Dempsky <mdemp...@chromium.org>
> wrote:
> > On Fri, May 8, 2015 at 12:47 AM, Dean McNamee <de...@chromium.org>
> wrote:
> >>
> >> Umm, I wouldn't say they're technically broken,
> >
> >
> > Unfortunately, then you'd be wrong.  The C++ standard is very clear that
> > (aside from certain cases like std::atomic) assigning to the same
> variable
> > (even via a volatile lvalue expression) from multiple threads is
> undefined
> > behavior.
> >
> > Using volatile lvalues happens to be mostly okay today, but mostly to
> > support code bases that predate 2011.  That doesn't change what the
> standard
> > says though or limit what compilers *could* do in the future.
> >
> >> Actually, the example illustrated in 2.4 is quite a different
> >> situation and does not reflect the code here.
> >
> >
> > I was only refuting your assertion that time::Now's race was safe
> **because
> > the writes are redundant**.  Section 2.4 of Boehm's paper demonstrates
> > that's not a sound argument **in general**.
> >
> > I.e., if you want to continue arguing that time::Now's race is safe (even
> > though the C++ standard says otherwise), you'll need a new supporting
> > argument.
> >
> >> in the clock code only *one* value will ever be
> >>
> >> written, always the same value.  In 2.4 that is not the case.
> >
> >
> > In section 2.4, that is the case.  The only source-level modifications to
> > count that happen in his example are the two "count = 0" assignments in
> the
> > left-hand column of page 4.  He's using an example of calling
> f(positives),
> > which means the "count++" source-level statements will never execute, yet
> > the unconditional "count = 0" assignments allow the compiler to optimize
> > assuming otherwise (i.e., the *effective* transformation to using "reg =
> > count", "reg++", and "count = reg" at the top-left of page 4).
> >
> >> I would read it carefully again,
> >
> >
> > Yes, please do, as you seem to have both missed the point of that
> specific
> > section as well as the entire conclusion of Boehm's paper:
> >
> > "Although there is a perfectly reasonable notion of benign data race at
> the
> > level of x86 or similar machine code, the same is not true at the C or
> C++
> > source program level. Standards are increasingly clear about prohibiting
> > data races."
> >
> >
> >> I am pretty sure compiler writers understand compilers and
> >> architectures enough to make what they feel is a good decision here.
> >
> >
> > And they've made the decision that source program level data races in C++
> > programs are undefined behavior with no guaranteed semantics.
>

-- 
-- 
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to