www.digitalmars.com         C & C++   DMDScript  

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

reply "Chuck Allison" <chuck freshsources.com> writes:
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.
Jun 01 2014
next sibling parent "Meta" <jared771 gmail.com> writes:
On Sunday, 1 June 2014 at 07:06:27 UTC, Chuck Allison wrote:
 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.

It is a known bug with an open pull request to fix it. https://github.com/D-Programming-Language/dmd/pull/3070
Jun 01 2014
prev sibling next sibling parent "Chuck Allison" <chuck freshsources.com> writes:
On Sunday, 1 June 2014 at 07:23:25 UTC, Meta wrote:

 It is a known bug with an open pull request to fix it.

 https://github.com/D-Programming-Language/dmd/pull/3070

Thanks!
Jun 01 2014
prev sibling parent =?UTF-8?B?Ik5vcmRsw7Z3Ig==?= <per.nordlow gmail.com> writes:
 https://github.com/D-Programming-Language/dmd/pull/3070


Is this design for the sake of explicitness so the D developer doesn't unknowingly add dependencies on atomics? /Per
Jun 01 2014