The singleton design pattern in D, C++ and Java
Max Samukha
spam at spam.com
Fri Jul 16 07:26:16 PDT 2010
On 16.07.2010 16:49, dsimcha wrote:
>
> 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;
> }
> }
> }
>
>
I invented it here:
http://www.digitalmars.com/d/archives/digitalmars/D/Static_constructors_in_circularly_imported_modules_-_again_110518.html#N110527
Which proves we are great minds :)
More information about the Digitalmars-d
mailing list