++x vs. atomicOp!"+="(x,1) with a shared int

Chuck Allison via Digitalmars-d digitalmars-d at puremagic.com
Sun Jun 1 00:06:25 PDT 2014


I was under the impression that calling ++x for a shared x is an 
error. Not only do I not get an error, the effect of ++x is 
identical to atomicOp"+="(x,1) in the following example (the 
variable is count here, not x):

shared int count;

void f(string s) {
     foreach (i; 0..100)
         writefln("%s: %s", ++count, s);
}

void main() {
     spawn(&f,"Dessert Topping");
     spawn(&f,"Floor Wax");
}

I get the same results if I change f like so:

void f(string s) {
     foreach (i; 0..100) {
         atomicOp!"+="(count,1);
         writefln("%s: %s", count, s);
     }
}

Is ++ now atomic for shared ints? I'm just wondering why the 
first version of f works at all, when TDPL says it should be an 
error.

Thanks.



More information about the Digitalmars-d mailing list