www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - is increment on shared ulong atomic operation?

reply Charles Hixson via Digitalmars-d-learn writes:
If I define a shared ulong variable, is increment an atomic operation?
E.g.

shared ulong t;

...

t++;

It seems as if it ought to be, but it could be split into read, 
increment, store.

I started off defining a shared struct, but that seems silly, as if the 
operations defined within a shared struct are synced, then the operation 
on a shared variable should be synced, but "+=" is clearly stated not to 
be synchronized, so I'm uncertain.
Feb 07 2016
parent reply rsw0x <anonymous anonymous.com> writes:
On Sunday, 7 February 2016 at 19:27:19 UTC, Charles Hixson wrote:
 If I define a shared ulong variable, is increment an atomic 
 operation?
 E.g.

 shared ulong t;

 ...

 t++;

 It seems as if it ought to be, but it could be split into read, 
 increment, store.

 I started off defining a shared struct, but that seems silly, 
 as if the operations defined within a shared struct are synced, 
 then the operation on a shared variable should be synced, but 
 "+=" is clearly stated not to be synchronized, so I'm uncertain.
https://dlang.org/phobos/core_atomic.html#.atomicOp
Feb 07 2016
parent reply rsw0x <anonymous anonymous.com> writes:
On Sunday, 7 February 2016 at 19:39:27 UTC, rsw0x wrote:
 On Sunday, 7 February 2016 at 19:27:19 UTC, Charles Hixson 
 wrote:
 If I define a shared ulong variable, is increment an atomic 
 operation?
 E.g.

 shared ulong t;

 ...

 t++;

 It seems as if it ought to be, but it could be split into 
 read, increment, store.

 I started off defining a shared struct, but that seems silly, 
 as if the operations defined within a shared struct are 
 synced, then the operation on a shared variable should be 
 synced, but "+=" is clearly stated not to be synchronized, so 
 I'm uncertain.
https://dlang.org/phobos/core_atomic.html#.atomicOp
Just noticed that there's no example. It's used like shared(ulong) a; atomicOp!"+="(a, 1);
Feb 07 2016
next sibling parent reply Minas Mina <minas_0 hotmail.co.uk> writes:
On Sunday, 7 February 2016 at 19:43:23 UTC, rsw0x wrote:
 On Sunday, 7 February 2016 at 19:39:27 UTC, rsw0x wrote:
 On Sunday, 7 February 2016 at 19:27:19 UTC, Charles Hixson 
 wrote:
 If I define a shared ulong variable, is increment an atomic 
 operation?
 E.g.

 shared ulong t;

 ...

 t++;

 It seems as if it ought to be, but it could be split into 
 read, increment, store.

 I started off defining a shared struct, but that seems silly, 
 as if the operations defined within a shared struct are 
 synced, then the operation on a shared variable should be 
 synced, but "+=" is clearly stated not to be synchronized, so 
 I'm uncertain.
https://dlang.org/phobos/core_atomic.html#.atomicOp
Just noticed that there's no example. It's used like shared(ulong) a; atomicOp!"+="(a, 1);
Wow, that syntax sucks a lot.
Feb 07 2016
next sibling parent rsw0x <anonymous anonymous.com> writes:
On Sunday, 7 February 2016 at 20:25:44 UTC, Minas Mina wrote:
 On Sunday, 7 February 2016 at 19:43:23 UTC, rsw0x wrote:
 On Sunday, 7 February 2016 at 19:39:27 UTC, rsw0x wrote:
 On Sunday, 7 February 2016 at 19:27:19 UTC, Charles Hixson 
 wrote:
 [...]
https://dlang.org/phobos/core_atomic.html#.atomicOp
Just noticed that there's no example. It's used like shared(ulong) a; atomicOp!"+="(a, 1);
Wow, that syntax sucks a lot.
how so? It's meant to be very explicit
Feb 07 2016
prev sibling parent Andrea Fontana <nospam example.com> writes:
On Sunday, 7 February 2016 at 20:25:44 UTC, Minas Mina wrote:
 Just noticed that there's no example.
 It's used like

 shared(ulong) a;
 atomicOp!"+="(a, 1);
Wow, that syntax sucks a lot.
a.atomicOp!"+="(1); sounds better. You can alias it too.
Feb 08 2016
prev sibling parent Charles Hixson via Digitalmars-d-learn writes:
Thanks, that's what I needed to know.

I'm still going to do it as a class, but now only the inc routine needs 
to be handled specially.
(The class is so that other places where the value is used don't even 
need to know that it's special.  And so that instances are easy to share 
between threads.)

On 02/07/2016 11:43 AM, rsw0x via Digitalmars-d-learn wrote:
 On Sunday, 7 February 2016 at 19:39:27 UTC, rsw0x wrote:
 On Sunday, 7 February 2016 at 19:27:19 UTC, Charles Hixson wrote:
 If I define a shared ulong variable, is increment an atomic operation?
 E.g.

 shared ulong t;

 ...

 t++;

 It seems as if it ought to be, but it could be split into read, 
 increment, store.

 I started off defining a shared struct, but that seems silly, as if 
 the operations defined within a shared struct are synced, then the 
 operation on a shared variable should be synced, but "+=" is clearly 
 stated not to be synchronized, so I'm uncertain.
https://dlang.org/phobos/core_atomic.html#.atomicOp
Just noticed that there's no example. It's used like shared(ulong) a; atomicOp!"+="(a, 1);
Feb 07 2016