This looks like the 'super-safe' C# implementation:
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
(from
http://msdn.microsoft.com/en-us/library/ff650316.aspx). Only problem is that VB doesn't have 'volatile' :-{
>>OK, but that could happen anywhere/anytime ... IOW, after the lock as well as before it.
>
>Which is why I would always put the expensive lock before accessing oApp.lInitialize
>
>_________________
>>
>Didn't say you made it up >>
>>I know, I was joking.
>>
>>
>Just thought that in case something can reset oApp.lInitialize - for whatever reason - the first test may think it's initialized and when it executes the next line it isn't anymore. ie, as long as nothing resets oApp.lInitialize, you are right.>>
>>OK, but that could happen anywhere/anytime ... IOW, after the lock as well as before it.
>>
>>
>But wouldn't a static initializer be more clear in this case ?
>>>>>>private/public static Dictionary TheDictionary = LoadDataDictionary() ; // as long as LoadDataDictionary() returns a dictionary
>>>
>>
>>Probably ... but we don't know how Michel has implemented the LoadDataDictionary() method, he hasn't said.
>>
>>~~Bonnie