atomicLoad/Store

deadalnix deadalnix at gmail.com
Mon Aug 5 23:01:55 PDT 2013


On Monday, 5 August 2013 at 20:22:37 UTC, zyhong wrote:
> From my understanding, any data type that is less than 32bit 
> (bool, char, int, etc) is atomic and there is no need to use 
> atomicLoad/Store and read/write the data to be thread safe. In 
> std.parallelism, I saw it use atomicLoad/Store for any shared 
> data. Could anyone clarify if it is really necessary to 
> atomicLoad/Store to read/write data that datatype is bool, int, 
> byte, etc?

You understanding is incorrect.

First, non atomic read.write don't guarantee any ordering, which
necessary when it come to sharing on a multiprocessor machine
(almost all machines nowadays).

Second, the fact that the CPU is capable of atomic read.write do
not mean that the compiler will issue an atomic read/write. The
compiler can :
   - load/store larger chunk (ie can load 32bits, modify 8bits of
it and store back 32bits when you update an byte).
   - eliminate load/store (as they do not change the single
threaded semantic).
   - reorder load/stores (same as above).
   - load/store byte by byte (unlikely, but legal).

Additionally, guarantee are hardware dependent. So if some of
these may not be useful on X86, which have a very strong memory
model, not using atomic makes it more difficult to port D.


More information about the Digitalmars-d mailing list