Я работаю над веб-приложением C# / ASP.NET, и у меня есть ряд ситуаций, когда мне нужно выполнить блокировку. В идеале я хочу, чтобы замки действовали независимо, так как они не имеют ничего общего друг с другом. Я рассматривал [MethodImpl(MethodImplOptions.Synchronized)] и несколько способов использования lock(), но у меня есть несколько вопросов / опасений.
Похоже, что MethodImplOptions.Synchronizedwill essentially dolock (this) `. В этом случае кажется, что поток, входящий в любой синхронизированный метод, блокирует потоки все остальные от входа в синхронизированный метод Любые. Это правильно? Если да, то это недостаточно детально. В этот момент мне кажется, что я могу использовать Application.Lock. (Но, пожалуйста, поправьте меня, если я ошибаюсь.)
Что касается lock(), я пытаюсь понять, что мне следует передать. Должен ли я создать набор объектов исключительно для этой цели и использовать каждый для другой блокировки? Есть ли способ лучше?
Заранее спасибо!





Вы можете предоставить некоторую статическую ссылку или синглтон и lock () это.
Может быть, вы объясните, зачем вам такая блокировка и для чего вы ее будете использовать?
Хорошо, но тогда применение блокировок / синхронизации на уровне метода мне вообще не кажется детализированным, поэтому я спросил ...
Сами методы содержат только те наборы, которые мне нужно заблокировать - не более того.
Создание экземпляров дискретных объектов на статическом уровне / уровне приложения - лучший способ простой монопольной блокировки.
Следует также учитывать, могут ли экземпляры блокировки чтения / записи на уровне приложения также помочь улучшить параллелизм вашего приложения, например. для чтения и обновления списков, хэшей и т. д.
Я предпочитаю создать объект специально для замка.
private object lockForSomeResource = new object();
в классе, который управляет спорным ресурсом. Джефф Рихтер опубликовал сообщение статья, которое я читал некоторое время назад, в котором рекомендовалось это.
Вам нужно тщательно продумать создание их в виде иерархии, если в блокировке есть какой-либо код, которому требуется другая блокировка. Убедитесь, что вы всегда запрашиваете их в одном и том же порядке.
Я разместил аналогичный вопрос на этом форуме, он может вам помочь. Ниже ссылка
Проблема с записью в отдельный файл в веб-службе в .NET
Это выглядит многообещающе. Я попробую.
Существует ряд переменных приложения и коллекций / списков, которые читаются и изменяются запросами. Каждый запрос "заботится" только об определенном подмножестве этих переменных. Я пытаюсь максимизировать пропускную способность, поэтому чем более детально я смогу сделать блокировки, тем лучше.