我应该为我的Singleton类使用线程安全还是非线程安全?

时间:2013-10-04 08:30:06

标签: c# wcf

我想实施Singleton,并从MSDN找到了这个问题的几个例子:

http://msdn.microsoft.com/en-us/library/ff650316.aspx

我有托管WCF服务的应用程序。 应用程序从String获取Client,并将此字符串发送到我的Singleton。 从Singleton class开始,我打开我的Job课程来完成我的工作(开放过程......)。 作业类包含Event,每次进程开始结束时都会更新我的UI。 并且Singleton class应该订阅此活动。 此外,当我的应用程序启动时,我将打开新的Singleton实例。

我的服务ServiceBehavior定义为ConcurrencyMode.MultipleInstanceContextMode.PerSession,因此每个客户端消息都会创建新实例:

[ServiceBehavior(
    ConcurrencyMode = ConcurrencyMode.Multiple,
    InstanceContextMode = InstanceContextMode.PerSession)]

所以我唯一的问题是在Singleton class使用线程安全或非线程安全吗?

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

在构建可以修改的内容时,您应该始终选择线程安全版本。如果它是只读集合,则线程安全性并不重要。

线程安全通常会因锁定而产生很小的性能成本,但是由于竞争条件通常难以调试,因此它可以为您节省很多潜在的痛苦。

答案 2 :(得分:0)

线程不安全可能会导致奇怪的结果,可能会创建多个实例,这违反了单例模式。线程安全单例是一个很好的方法。

看看Jon Skeet的文章,使用不同的方法,如线程安全,懒惰的实例化等。

http://csharpindepth.com/articles/general/singleton.aspx