I want to add a Phobos module with template mixins for common idioms.
Diggory
diggsey at googlemail.com
Mon May 20 04:19:42 PDT 2013
On Monday, 20 May 2013 at 06:53:34 UTC, Idan Arye wrote:
> On Monday, 20 May 2013 at 05:39:42 UTC, Diggory wrote:
>> In your logic you're assuming that the order of operations is
>> maintained - without the correct memory barriers or
>> synchronisation both the compiler and CPU are free to
>> completely reorder any operations you do. That's why it's
>> always a bug to access mutable shared data without
>> synchronisation - any read not using some form of
>> synchronisation could give you back any value that the memory
>> is ever set to during the course of the program.
>
> It can't be THAT chaotic. Neither the compiler nor the CPU will
> perform a check on a value and then go back in time to fetch an
> old version of that value and return it. This kind of behavior
> would break non-threaded code.
Of course it's possible, for example the code may produce the
expected result if some invariant holds which does in fact hold
if there was a single thread running, but with multiple threads
the invariant is broken. Or more simply - the fact remains that
you are writing on one thread (correctly using synchronisation)
and reading from another (not using synchronisation) and
synchronisation is required on both the read and the write. The
compiler/CPU is then free to reorder the reads under the
assumption that the value won't change, and this assumption is
clearly wrong.
Basically most of your argument is just hoping that it will
behave the way you want, but without having any real guarantees,
and that's not the way to write thread-safe code, especially if
it's going to be part of the standard library.
More information about the Digitalmars-d
mailing list