我想实施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.Multiple
和InstanceContextMode.PerSession
,因此每个客户端消息都会创建新实例:
[ServiceBehavior(
ConcurrencyMode = ConcurrencyMode.Multiple,
InstanceContextMode = InstanceContextMode.PerSession)]
所以我唯一的问题是在Singleton class
使用线程安全或非线程安全吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
在构建可以修改的内容时,您应该始终选择线程安全版本。如果它是只读集合,则线程安全性并不重要。
线程安全通常会因锁定而产生很小的性能成本,但是由于竞争条件通常难以调试,因此它可以为您节省很多潜在的痛苦。
答案 2 :(得分:0)
线程不安全可能会导致奇怪的结果,可能会创建多个实例,这违反了单例模式。线程安全单例是一个很好的方法。
看看Jon Skeet的文章,使用不同的方法,如线程安全,懒惰的实例化等。