synchonized? correct use? Thread-safe Singleton

BLS nanali at nospam-wanadoo.fr
Fri Jan 4 10:40:22 PST 2008


BCS schrieb:
> Reply to bls,
> 
>> 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 !
>>
> 
> Oops, typo!!
> 
> class Application // no ": ..."
> 
>> Hope I ask not for too much, but please explain the use of the mixin
> 
> Think of a mixin as a copy/paste + macro. Instance the template (that's 
> the macro part) and just lump it into whatever scope you use it in (the 
> copy/paste part). It's a quick way to do boiler plate coding.
> 
>> Bjoern
>>
> 
> 
Thanks BCS:
 >>>>> class Application // no ": ..."

Ah, that makes more sense :)

Okay .
Now; to make it smart .

class Application
{
   class Singleton
   {
   }
}
You mean ... shi. ?

very very big grin
Seriously? I need a bullet proof thread safe singleton implementation ..

Hell I should change my BLS into LS , people here are sometimes confused.
Bjoern


More information about the Digitalmars-d-learn mailing list