Bob*_*tor 9 .net c# singleton multithreading
我正在寻找在多线程Win服务中使用单例进行日志记录,并想知道我可能遇到的一些问题.我已经设置了get实例来处理同步
private static volatile Logging _instance;
private static object _syncRoot = new object();
private Logging(){}
public static Logging Instance
{
get
{
if (_instance==null)
{
lock(_syncRoot)
{
if (_instance == null)
{
_instance = new Logging();
}
}
}
return _instance;
}
}
Run Code Online (Sandbox Code Playgroud)
还有什么我可能需要担心的吗?
Jon*_*eet 12
这比其他任何信息更具信息性.
您发布的是双重检查锁定算法 - 据我所知,您发布的内容将起作用.(从Java 1.5开始,它也适用于那里.)然而,它非常脆弱 - 如果你有任何不妥之处,你可以引入非常微妙的竞争条件.
我通常更喜欢在静态初始化器中初始化单例:
public class Singleton
{
private static readonly Singleton instance = new Singleton();
public static Singleton Instance
{
get { return instance; }
}
private Singleton()
{
// Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
(如果你想要一点额外的懒惰,可以添加一个静态构造函数.)
这种模式更容易正确,在大多数情况下它也同样如此.
我的C#单例实现页面上有更多细节(也由Michael链接).
至于危险 - 我说最大的问题是你失去了可测试性.对于伐木来说可能不算太糟糕.
| 归档时间: |
|
| 查看次数: |
2760 次 |
| 最近记录: |