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

Meta via Digitalmars-d digitalmars-d at puremagic.com
Sun Jun 1 00:23:24 PDT 2014


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


More information about the Digitalmars-d mailing list