[FONT=Courier New]Application.Lock();
Application[[COLOR=blue]"SharedVariable"[/COLOR]] = [COLOR=blue]4[/COLOR];
Application.UnLock();[/FONT]
Статическое поле и многопоточность в web
То ли меня параноя замучала... Web-приложения на ASP.NET (сайт/сервис), описан класс со статическим полем. Вопрос: это поле будет общим для всех пользователей/вызовов или у каждого своё? Короче, нужно ли разводить потоки при доступе к этому полю (если пользователь/вызов пользуется только одним потоком, других не создаёт) ?
Будет общим для всех пользователей. А нужно ли разводить, зависит от контекста. Но каждый пользователь, это отдельный поток, который может работать с этим полем.
Статическое поле будет общим для всех пользователей. Чтобы создать переменную для каждого пользователя, нужно воспользоваться свойством HttpApplication.Session. Чтобы создать переменные, которые видны всем пользователям, а не только в пределах одной сессии, то свойством HttpApplication.Application - это более предпочтительнее, чем статическое поле.
А HttpApplication сам разводит потоки?
Переменные, указанные в Session, доступны только для текущего пользователя, и если одна сессия однопоточна то бояться нечему. В случае с многопоточностью с HttpApplication.Application, то класс предоставляет средства для блокировки и синхронизации. Пример:
Например, устанавливать значение лучше так:
Код:
И не будет никаких проблем с многопоточностью. Всё просто