I am wondering which following code is best:
private static volatile OrderedDictionary _instance;
private static readonly Object SyncLock = new Object();
private static OrderedDictionary Instance
{
     get { return _instance ?? (_instance = new OrderedDictionary()); }
}
 public static Mea Add(Double pre, Double rec)
{
     lock (SyncLock)
     {
        ...
     }
}
Or is it OK and better IMO just use the following?
private static volatile OrderedDictionary _instance;
private static OrderedDictionary Instance
{
     get { return _instance ?? (_instance = new OrderedDictionary()); }
}
 public static Mea Add(Double pre, Double rec)
{
     lock (Instance)
     {
        ...
     }
}
Based on Mike Strobel's answer I have done to following changes:
public static class Meas
{
    private static readonly OrderedDictionary Instance = new OrderedDictionary();
    private static readonly Object SyncLock = new Object();
    public static Mea Add(Double pre, Double rec)
    {
        lock (SyncLock)
        {
            Instance.Add(pre, rec);
            ...
        }
    }
}
                Mike Strobel's advice is good advice. To sum up:
Lazy<T> type; it was designed by experts who know what they are doing.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With