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