Speed of synchronized

tcak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Oct 16 10:50:29 PDT 2016


On Sunday, 16 October 2016 at 08:41:26 UTC, Christian Köstlin 
wrote:
> Hi,
>
> for an exercise I had to implement a thread safe counter. This 
> is what I came up with:
>
> [...]

Could you try that:

class ThreadSafe3Counter: Counter{
   private long counter;
   private core.sync.mutex.Mutex mtx;

   public this() shared{
   	mtx = cast(shared)( new core.sync.mutex.Mutex );
   }

   void increment() shared {
   	(cast()mtx).lock();
   	scope(exit){ (cast()mtx).unlock(); }

     core.atomic.atomicOp!"+="(this.counter, 1);
   }

   long get() shared {
     return counter;
   }
}


Unfortunately, there are some stupid design decisions in D about 
"shared", and some people does not want to accept them.

Example while you are using mutex, so you shouldn't be forced to 
use atomicOp there. As a programmer, you know that it will be 
protected already. That is a loss of performance in the long run.


More information about the Digitalmars-d-learn mailing list