Non-atomic ops allowed on shared variables?

Jonathan M Davis jmdavisProg at gmx.com
Sat Dec 3 11:19:45 PST 2011


On Saturday, December 03, 2011 18:32:15 Andrej Mitrovic wrote:
> I thought this wasn't allowed:
> 
> shared uint threadsCount;
> 
> void bumpThreadsCount()
> {
>     ++threadsCount;
> }
> 
> void main()
> {
> }
> 
> According to TDPL it should error and we should use atomicOp from
> std.concurrency instead. atomicOp is what I've used so far if I had to
> use shared variables. Has ++ suddenly become atomic automatically or
> is this a bug?

Where in TDPL does it say this? Requiring that all operations on a shared 
object be atomic would be highly restrictive. Sure, if you use anything other 
than an atomic operation on a shared object and don't use a synchronized block 
or a mutex or the like, you risk race conditions, but if every operation on a 
shared object had to actually be atomic, you couldn't do much of anything to 
them.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list