簡體   English   中英

一行中的線程安全 singleton 屬性

[英]Thread safe singleton property in one line

如何在一行中編寫以下代碼?

   private static LockSDP instance;
        private static readonly object _lock = new();
        public static LockSDP GetInstance
        {
            get
            {
                if (instance is null) lock (_lock) instance ??= new();
                return instance;
            }
        }

錯誤

不是所有的東西都可以一條線; 然而,這可能更容易; 可以使用Lazy<T> ,但對於此處主要在延遲實例化之后的簡單static ,我可能會依賴 static 字段行為和嵌套的 class:

public static LockSDP GetInstance => LockProxy.Instance;
private static class LockProxy { public static readonly LockSDP Instance = new(); }

我可能更喜歡馬克的回答,但就是這樣:

private static readonly Lazy<LockSDP> _lazyInstance = 
    new Lazy<LockSDP>(() => new LockSDP()); // Default is Threadsafe access.

public static LockSDP Instance => _lazyInstance.Value;

是的:我確實意識到它仍然是 2 行:/

供參考: Lazy<T>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM