unsynchronized access to primitive variables
Steven Schveighoffer
schveiguy at yahoo.com
Wed May 23 13:07:42 PDT 2012
On Sat, 19 May 2012 04:16:39 -0400, luka8088 <luka8088 at owave.net> wrote:
> Hello to all,
>
> I would like to know if D guarantees that access to primitive variable
> is atomic ?
>
> I was looking for any source of information that says anything about
> unsynchronized access to primitive variables. What I want to know is if
> it is possible (in any way and any OS / hardware) for the following code
> to output anything other then 1 or 2:
>
> import std.stdio;
> import core.thread;
>
> void main () {
> int value = 1;
> (new Thread({ value = 2; })).start();
> writeln(value);
> }
>
> Thanks !
It depends on hardware architecture. loads and stores of word sizes are
generally atomic. A better (more portable) version would be to make value
size_t or ptrdiff_t, which should mimic CPU word size.
In very crude multithreading apps, I rely on this all the time. But you
have to be careful not to change the value in more than one thread, or you
are subject to racing.
-Steve
More information about the Digitalmars-d-learn
mailing list