2013-10-04 53 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

相關問題