synchonized? correct use? Thread-safe Singleton

BCS ao at pathlink.com
Fri Jan 4 09:45:35 PST 2008


Reply to bls,

> Do I have a THread-safe singleton ? If not HowTo..   Sorry. Sean K
> allready explains it to me, but I 've lost the info. :(
> Bjoern
> class Singleton(T)
> {
> public:
> static T instance()
> sychronized       // according to the language spec this should
> work
> {
> if(_instance is null) _instance = new T;
> return _instance;
> }
> private:
> this() {}
> static T _instance;
> }
> class Application : Singleton!(Application)
> {
> }

I think this will fail because Singleton!(Application).instance() will call 
Application's this() and that is private.

IMHO, a better approach (that I haven't tested) would be to use a mixin:

template Singleton(T)
{
  public:
  static T instance() sychronized
       // according to the language spec this should work
  {
    if(_instance is null) _instance = new T;
    return _instance;
  }
  private:
  this() {}
  static T _instance;
}

class Application : Singleton!(Application)
{
  mixin(Singleton!(typeof(this)));
}




More information about the Digitalmars-d-learn mailing list