2016-05-30 61 views
2

問:當來自兩個不同應用程序域的兩個線程訪問類時,單例實例是否會被破壞?Singleton類和多線程

我做了一些研究,發現以下幾點相關。

  1. (.NET)Singleton對於每個App-domain是唯一的 - 至少,常見的Singleton模式是。我想你可以實現每個進程單身人士,但我沒有想過它會如何真正工作......

  2. 將有2個單身人士的實例。

  3. 該方法的輸入參數(參數)在堆棧中。每個線程都有一個單獨的堆棧。當正在運行的線程切換時,堆棧被替換。

專家的建議。?

回答

3

當來自兩個不同應用程序域的兩個線程訪問該類時,是否會破壞單例實例?

是的。它甚至有可能來自同一個應用程序域。考慮這個簡單單的實現:

private static Singleton instance; 
public static Singleton Instance 
{ 
    if (instance == null) 
    { 
     instance = new Singleton(); 
    } 

    return instance; 
} 

這可能是兩個線程在同一時間進入房地產。在這兩種情況下,instance == null都是正確的,並且創建了一個新實例。一種方法已經返回創建的實例,另一種方法重置instance,稍後返回該方法。單身人士破碎。

更多閱讀thread-safe singletons on the blog of Jon Skeet

+0

非常感謝@Patrick。 – Gagan