Существуют ли какие-либо распространенные практики или правила, чтобы избежать взаимоблокировки в программе? Также есть ли поддержка от CLR или любого инструмента из языка/структуры для обработки такого сценария?Как избежать тупика в .NET
ответ
MSDN на самом деле есть несколько хороших статей на эту тему, один из которых являются:
Avoiding and Detecting Deadlocks in .NET Apps with C# and C++
Спасибо за ссылку! – user854301
Я думаю, что лучше, чтобы вы вокруг проблемы заключается в использовании нормального процесса управления. Предохраняйте доступ к своим ресурсам с помощью мьютексов или семафоров.
Это может помочь вам
http://msdn.microsoft.com/en-us/library/hw29w7t1(v=vs.71).aspx
Я не вижу, чтобы какие-то изменения в какой-то мере меняли проблему; это идентичная проблема, но с управляемыми ОС управляющими примитивами. Вы можете так же взаимоблокировать с помощью мьютекса/семафора. –
Да, вы правы, на самом деле мьютексы и семафоры являются причиной тупиков. Я предполагаю, что единственный способ избежать этого - это очень хорошо спланировать способ доступа вашего кода к вашим ресурсам. – j0N45
Обратите внимание, что мало это .net специфический:
Самым большим способом избежать тупиковой ситуации является замка в последовательном порядке; это означает, что вы получаете регулярную блокировку, а не тупик, но требует много размышлений и планирования того, что вы блокируете и когда. Конечно, эта мысль и планирование необходимы в любом случае.
Один простой способ достичь этого: попытаться использовать только один объект блокировки за раз; поэтому вместо блокировки A и B вы блокируете (отдельно) A , затем B. Это тоже требует мысли и планирования, но обычно это достижимо.
Принимая это в более общем плане, избегая чрезмерно гранулированных замков, здесь может быть огромная застенчивость. Для объектов блокировки, которые могут конкурировать, серьезно рассмотрите возможность использования единственного замка для обеих концепций. Во многих случаях это не сильно влияет на время, затрачиваемое на конкуренцию, но делает код намного проще и надежнее.
На самом деле, у одной руки у меня есть язык, что «взять замок, но с таймаутом» - это так много более интенсивный код, чем «взять замок». У вас всегда есть тайм-ауты, которые также могут обеспечить полное восстановление блокировки. Но в основном это нужно использовать только для определения областей, которые блокируются в неправильном порядке, так что вы можете их исправить.
Я ценю ваш ответ. – user854301
- 1. Как избежать тупика mysql?
- 2. Как избежать этого тупика mysql?
- 3. Как избежать легко сделанного тупика?
- 4. Как избежать тупика в этом сценарии?
- 5. Избежать тупика с помощью HttpClient
- 6. Синхронизированные методы, чтобы избежать тупика
- 7. C# - Как избежать тупика с помощью TcpClient?
- 8. как избежать тупика с параллельными именованными трубами?
- 9. Как избежать тупика на @synchronized (self)?
- 10. Как я могу избежать этого тупика в типе Oracle.sql.ARRAY?
- 11. Как избежать установки .net framework
- 12. Гарантия тупика
- 13. Ошибка тупика в golang
- 14. Обнаружение тупика в Java
- 15. Предупреждение о взаимоблокировке тупика
- 16. Как избежать зависимостей .dll в .NET.
- 17. Как избежать%> в asp .net mvc?
- 18. Как я могу избежать InvalidCastException в .NET?
- 19. избежать .NET версий ад
- 20. Ошибка тупика с одноэлементным
- 21. Как найти BOTH потоки тупика?
- 22. Как узнать причину тупика Oracle
- 23. является synclock в многопоточности, избегает тупика
- 24. Как восстановить исключение тупика во время SqlDataReader.Read()
- 25. Пример тупика резьбы в C#
- 26. Как выйти из тупика в linux
- 27. Необходимость тупика в веб-приложении
- 28. Как я могу избежать тупика с помощью этого единственного оператора UPDATE, даже при использовании TABLOCKX?
- 29. Шаблоны для обработки SQL-тупика в C#?
- 30. segfault в критической секции - избегание тупика
Учитывается ли «блокировка вещей в последовательном порядке»? –
Очень сложно удержаться от ответа «просто избегайте нарезания резьбы». –
Извините за неправильную формулировку, я просто хочу знать, могу ли я следовать некоторым правилам, чтобы избежать таких проблем (например, не блокировать это). – user854301