2016-05-30 2 views
2

В: Может ли экземпляр singleton быть разбит, когда два потока из двух разных доменов доступа к классу?Singleton class & multi-threading

Я сделал некоторые исследования и нашел ниже соответствующих пунктов.

  1. A (.NET) Singleton уникален для каждого домена приложения - по крайней мере, общий шаблон Singleton. Я полагаю, вы могли бы реализовать один процесс Singleton, но я не думал о том, как он действительно будет работать.

  2. Было бы 2 экземпляра вашего синглтона.

  3. Параметры ввода (аргументы) метода находятся в стеке. Каждый поток имеет отдельный стек. Когда работающий поток переключается, стек заменяется.

Экспертный совет.?

ответ

3

Может ли экземпляр singleton быть разбит, если два потока из двух разных доменов доступа к классу?

Да. Это возможно даже из одного домена приложения. Рассмотрим эту простую синглтонную реализацию:

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