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