【发布时间】:2011-07-29 21:56:17
【问题描述】:
我有一个类,我想通过创建它的静态实例将其用作单例。当然,我也希望它是线程安全的。
假设我没有共享任何私人数据。但是如果我没记错的话,仍然存在调用静态对象实例的方法时,方法中的变量是跨线程共享的,并且会产生不可预知的结果的问题。
但是,当调用真正的静态方法时,会创建一个新的堆栈帧,因此无论如何它都是线程安全的(对自身而言)。再说一次,如果我没记错的话。
单例的这种模式是线程安全的吗?
class Singleton
{
public object SomeMethod(object arg) {
return Singleton.SomeMethodImpl(arg);
}
private static object SomeMethodImpl(object arg) {
// is in unique stack frame?
object Result;
...
return Result;
}
}
如果您想知道为什么我不首先创建一个静态类 - 我需要一个基于接口的单例,并且具有不同的实现,作为策略模式的一部分。这不适用于静态类。
【问题讨论】:
-
如果你想要一个关于如何创建单例的好例子,我会看看:dofactory.com/Patterns/PatternSingleton.aspx。
-
刚刚略读。好信息 - 已添加书签。就我现在的目的而言,我认为我不需要担心锁定,因为我没有访问类中的任何共享数据。
标签: c# thread-safety singleton static-methods