Speed of synchronized
Christian Köstlin via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Oct 16 22:56:35 PDT 2016
On 16/10/16 19:50, tcak wrote:
> 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.
thanks for the implementation. i think this is nicer, than using __gshared.
i think using atomic operations and mutexes at the same time, does not
make any sense. one or the other.
thanks,
Christian
More information about the Digitalmars-d-learn
mailing list