我想知道在多線程情況下單例如何工作。 假設2個線程輸入實例化代碼,如下面的代碼所示,第1個線程輸入實例化代碼,它鎖定該部分並繼續其操作,直到另一個線程等待。 因此,一旦第一個線程完成其操作,第二個線程將進入實例化代碼,現在我想知道誰承擔釋放鎖的責任,因爲第一個線程已完成其操作,第二個線程將創建新實例或將共享第一個線程實例???單線程C多線程#
代碼:
public sealed class Singleton
{
private static Singleton instance = null;
// adding locking object
private static readonly object syncRoot = new object();
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
[線程安全的C#Singleton模式(HTTP的可能重複://計算器。com/questions/12316406/thread-safe-c-sharp-singleton-pattern) – Sanket
如果適用,請考慮使用依賴注入而不是單例。一個容器實例化所有應該有單個對象的類,並通過ctor將它們注入需要它們的類。 Unity是一個在C#中支持這個框架的框架。# – Itsik