The singleton design pattern in D, C++ and Java
dsimcha
dsimcha at yahoo.com
Fri Jul 16 06:49:43 PDT 2010
== Quote from Justin Johansson (no at spam.com)'s article
> Which language out of C++, D and Java does this classical
> "GoF" (gang-of-four***) design pattern best?
> *** http://en.wikipedia.org/wiki/Design_Patterns
> For my take, I prefer synchronization-free implementations.
> Surely this topic has been around before???
> <bystander awareness="clueless" name="Justin"/>
D makes it very easy to create an efficient thread-safe Singleton implementation,
using a method that was inspired by broken double-checked locking, but uses
thread-local storage to be correct. The following algorithm guarantees that the
synchronized block guarding the Singleton will be entered at most once per thread
throughout the lifetime of the program. I invented it myself, but it's fairly
simple and might have been independently invented elsewhere:
class Singleton {
private:
static bool initialized; // Thread-local
__gshared static Singleton instance;
this() {}
public:
static Singleton getInstance() {
if(initialized) {
return instance;
}
synchronized(Singleton.classinfo) {
scope(success) initialized = true;
if(instance !is null) {
return instance;
}
instance = new Singleton;
return instance;
}
}
}
More information about the Digitalmars-d
mailing list