On Sunday, 16 October 2016 at 08:41:26 UTC, Christian Köstlin wrote:

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 {
        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.

Reply via email to