Являются ли синглтон-классы потокобезопасными в IIS? - PullRequest
7 голосов
/ 02 декабря 2008

У меня есть веб-страница ASP.NET, работающая под IIS, в которой используется общая сборка, содержащая одноэлементный класс. Должен ли я реализовать механизм блокировки на синглтоне, чтобы сделать его потокобезопасным? Или какое-либо соединение с веб-сервером будет использовать тот же экземпляр синглтона?

Надеюсь, я последовательно это спрашиваю.

Ответы [ 3 ]

2 голосов
/ 02 декабря 2008

Обычный шаблон для .NET синглетонов создает один экземпляр на домен приложения. Обычная ситуация в asp.net состоит в том, что у вас есть несколько потоков, проходящих через один домен приложения. Это означает, что вы вполне можете иметь несколько потоков, выполняющих код в вашем синглтоне одновременно.

Вы должны изучить синглтон и определить (в меру своих возможностей koffreflectorkoff ), является ли он потокобезопасным или нет. Если он сохраняет и изменяет общие ресурсы, или если он инкапсулирует какое-то состояние, которое сохраняется между вызовами методов, будьте осторожны.

Возможно, вы захотите заключить синглтон во второй синглтон, который использует блокировки, прежде чем делегировать свои вызовы тому, который вы не можете контролировать. Таким образом, вы могли бы лучше контролировать блокировку, а не блокировать каждый вызов синглтона с помощью одной блокировки. Это также дало бы вам возможность централизовать расположение потокового кода ...

2 голосов
/ 02 декабря 2008

Если это статический синглтон ... нет, это не потокобезопасно. Он распределяется между всеми потоками, которые обращаются к этому экземпляру приложения (поэтому мульти-запросы будут делиться им).

Однако для того, для чего вы его используете, не обязательно нужна безопасность потоков.

0 голосов
/ 02 декабря 2008

В .NET можно реализовать Потокобезопасный синглтон без использования замков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...