Low-Lock Singletons In D

Max Samukha maxsamukha at gmail.com
Mon May 6 06:14:26 PDT 2013


On Monday, 6 May 2013 at 02:35:33 UTC, dsimcha wrote:
> On the advice of Walter and Andrei, I've written a blog article 
> about the low-lock Singleton pattern in D.  This is a 
> previously obscure pattern that uses thread-local storage to 
> make Singletons both thread-safe and efficient and was 
> independently invented by at least me and Alexander Terekhov, 
> an IBM researcher.  However, D's first-class treatment of 
> thread-local storage means the time has come to move it out of 
> obscurity and possibly make it the standard way to do 
> Singletons.
>
> Article:
> http://davesdprogramming.wordpress.com/2013/05/06/low-lock-singletons/
>
> Reddit:
> http://www.reddit.com/r/programming/comments/1droaa/lowlock_singletons_in_d_the_singleton_pattern/

FWIW, I played with a generalized form of this pattern long ago, 
something like (typing from memory):

template sharedGlobal(alias ctor, alias lock = globalLock)
{
      @property sharedGlobal()
      {
          alias ReturnType!ctor T;
          __gshared static Nullable!T t;
          static bool instantiated;

          if (!instantiated)
          {
              synchronized(lock)
              {
                  if (t is null)
                      t = ctor();
              }
      }

      return cast(T)t;
}

alias sharedGlobal!({ return new Blah(); }) blah;

It should have been part of QtD but that has never happened.


More information about the Digitalmars-d mailing list