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.