Testing some singleton implementations

TC chalucha at gmail.com
Fri Feb 7 02:25:50 PST 2014


On Friday, 31 January 2014 at 08:25:16 UTC, Andrej Mitrovic wrote:
> class LockSingleton
> {
>     static LockSingleton get()
>     {
>         __gshared LockSingleton _instance;
>
>         synchronized
>         {
>             if (_instance is null)
>                 _instance = new LockSingleton;
>         }
>
>         return _instance;
>     }
>
> private:
>     this() { }
> }

Should't be the LockSingleton implemented like this instead?

class LockSingleton
{
     static auto get()
     {
         if (_instance is null)
         {
             synchronized
             {
                 if (_instance is null)
                     _instance = new LockSingleton;
             }
         }

         return _instance;
     }

private:
     this() { }
     __gshared LockSingleton _instance;
}

At least this is the way singleton is suggested to implement in 
C#, because synchronization is then needed only for initial 
instantiation and not allways.


More information about the Digitalmars-d mailing list