我想知道在多线程情况下单例如何工作。 假设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