C # / ASP.NET - блокировка веб-приложений - PullRequest
2 голосов
/ 24 сентября 2008

Я работаю над веб-приложением на C # / ASP.NET, и у меня есть несколько ситуаций, когда мне нужно сделать блокировку. В идеале я хочу, чтобы замки действовали независимо, поскольку они не имеют ничего общего друг с другом. Я рассматривал [MethodImpl(MethodImplOptions.Synchronized)] и несколько способов использования lock(), но у меня есть несколько вопросов / проблем.

Похоже, что MethodImplOptions.Synchronized will essentially do lock (this) `. В этом случае кажется, что поток, входящий в любой синхронизированный метод, заблокирует все остальные потоки от ввода любого синхронизированного метода. Это правильно? Если так, это не достаточно детально. В этот момент кажется, что я также могу использовать Application.Lock. (Но, пожалуйста, поправьте меня, если я ошибаюсь.)

Что касается lock(), я пытаюсь выяснить, что мне следует передать. Должен ли я создать набор объектов исключительно для этой цели и использовать каждый из них для отдельной блокировки? Есть ли лучший способ?

Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 24 сентября 2008

Я предпочитаю создать объект специально для блокировки.

private object lockForSomeResource = new object();

в классе, который управляет спорным ресурсом. Джефф Рихтер опубликовал статью Я читал некоторое время назад, что рекомендовал это.

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

1 голос
/ 24 сентября 2008

Я разместил похожий вопрос на этом форуме, который может вам помочь. Следующая ссылка

Ошибка записи в один файл в веб-сервисе в .NET

0 голосов
/ 24 сентября 2008

Создание экземпляров дискретных объектов на статическом / прикладном уровне - лучший способ простой монопольной блокировки.

Следует также учитывать, могут ли экземпляры блокировки чтения / записи на уровне приложения помочь улучшить параллелизм вашего приложения, например, для чтения и обновления списков, хэшей и т. д.

0 голосов
/ 24 сентября 2008

Вы можете выставить некоторую статическую ссылку или одиночный, и заблокировать (), что.

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

...