synchonized? correct use? Thread-safe Singleton

BLS nanali at nospam-wanadoo.fr
Fri Jan 4 10:28:44 PST 2008


BCS schrieb:
> 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)));
> }
> 
> 

Thanks BCS,

Confused  ...'cause virus infected (me) not the pc


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

Honk, that stinks somehow !

Hope I ask not for too much, but please explain the use of the mixin
Bjoern


More information about the Digitalmars-d-learn mailing list