Monitor с защитой от взаимных блокировок

Рейтинг: 7Ответов: 2Опубликовано: 19.03.2011

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

Это же происходит в СУБД при работе двух транзакций, блокирующих две таблицы во взаимно противоположном порядке. Но Microsoft SQL Server умеет диагностировать эту ситуацию и предотвращает взаимную блокировку путём выкидыванием исключения.

Однако класс System.Threading.Monitor не предоставляет такой возможности. Я подумываю о том, чтобы сделать более продвинутую обёртку над ним. В связи с этим, у меня два вопроса:

  • имеет ли это вообще смысл, или реализация такой проверки в базовом инструменте синхронизации убьёт производительность?
  • Если имеет, то помогите мне поставить задачу - как сформулировать критерий, по которому можно диагностировать возможность взаимной блокировки.

Ответы

Ответов пока нет.