Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Статическое поле и многопоточность в web

15K
14 ноября 2006 года
Hipson
16 / / 01.11.2006
То ли меня параноя замучала... Web-приложения на ASP.NET (сайт/сервис), описан класс со статическим полем. Вопрос: это поле будет общим для всех пользователей/вызовов или у каждого своё? Короче, нужно ли разводить потоки при доступе к этому полю (если пользователь/вызов пользуется только одним потоком, других не создаёт) ?
3.6K
14 ноября 2006 года
kuljok
64 / / 16.03.2004
Будет общим для всех пользователей. А нужно ли разводить, зависит от контекста. Но каждый пользователь, это отдельный поток, который может работать с этим полем.
273
15 ноября 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=kuljok]Будет общим для всех пользователей. А нужно ли разводить, зависит от контекста. Но каждый пользователь, это отдельный поток, который может работать с этим полем.[/quote]
Статическое поле будет общим для всех пользователей. Чтобы создать переменную для каждого пользователя, нужно воспользоваться свойством HttpApplication.Session. Чтобы создать переменные, которые видны всем пользователям, а не только в пределах одной сессии, то свойством HttpApplication.Application - это более предпочтительнее, чем статическое поле.
15K
15 ноября 2006 года
Hipson
16 / / 01.11.2006
А HttpApplication сам разводит потоки?
273
15 ноября 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=Hipson]А HttpApplication сам разводит потоки?[/quote]
Переменные, указанные в Session, доступны только для текущего пользователя, и если одна сессия однопоточна то бояться нечему. В случае с многопоточностью с HttpApplication.Application, то класс предоставляет средства для блокировки и синхронизации. Пример:
Например, устанавливать значение лучше так:
 
Код:
[FONT=Courier New]Application.Lock();
Application[[COLOR=blue]"SharedVariable"[/COLOR]] = [COLOR=blue]4[/COLOR];
Application.UnLock();[/FONT]

И не будет никаких проблем с многопоточностью. Всё просто
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог