2013-10-04 52 views
1

我想要实现Singleton,发现这个acrticle从MSDN有几个例子:我应该为我的目的使用线程安全还是非线程安全的Singleton类?

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

我有应用程序主机WCF服务。 应用程序从Client获得String,并将此字符串发送到我的Singleton。 从Singleton class我打开我的Job类做我的东西(打开过程..)。 作业类包含Event,每次进程开始结束更新我的UI。 和Singleton class应订阅此事件。 另外我在我的应用程序启动时打开新的Singleton实例。

我的服务ServiceBehavior定义为ConcurrencyMode.MultipleInstanceContextMode.PerSession所以每一个客户端消息创建新实例:

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

所以我只qustion是shold我用我的Singleton class线程安全还是非线程安全的?

+0

为什么不使用一个线程安全的? – elyashiv

+0

这个问题不是为什么不,但如果我需要它 – user2813889

+0

使它线程安全,没有任何缺点,使它线程安全,你可以避免未来头痛。 –

回答

2
+0

如此多线程Singleton从上面的链接与我的活动将完成这项工作? – user2813889

+0

@hugh看看[在C#中实现Singleton模式](http://csharpindepth.com/articles/general/singleton.aspx)。 –

+0

我应该使用什么版本? – user2813889

1

你应该总是选择线程安全的版本,当你正在建设的东西,可以是修改。如果它是只读集合,那么线程安全并不重要。

线程安全性通常会由于锁定而导致小的性能成本,但由于竞争条件通常难以调试,因此以后可以为您节省很多潜在的麻烦。

0

线程不安全可能以奇怪的结果结束,可能创建超过1个实例,这违反了单例模式。线程安全单例是一个好方法。

看看到乔恩斯基特的文章,与像线程安全不同的方法,延迟实例等

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

相关问题