1

我想通过几个例子来实现Singleton并找到这个acrticle :MSDN

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

我有托管WCF服务的应用程序。应用程序从中获取StringClient并将此字符串发送到我的Singleton. 从Singleton class我开始我的Job班级开始做我的事情(开放过程..)。作业类包含Event每次进程开始到结束时更新我的​​ UI。并且Singleton class应该订阅这个事件。当我的应用程序启动时,我也打开了新Singleton实例。

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

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

所以我唯一的问题是我应该使用线程安全还是非线程安全Singleton class

4

3 回答 3

2

的,单例应该是线程安全的。

于 2013-10-04T08:41:44.077 回答
1

当您构建可以修改的东西时,您应该始终选择线程安全版本。如果它是只读集合,那么线程安全并不重要。

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

于 2013-10-04T08:46:37.877 回答
0

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

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

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

于 2013-10-04T08:54:42.023 回答