Каковы лучшие практики/идиомы, которым следует следовать, чтобы избежать взаимоблокировок?Избегайте взаимоблокировок в многопоточном процессе
ответ
Пожалуйста, см What are common reasons for deadlocks?
Канонический метод для избежания тупиковой, чтобы иметь иерархию блокировки. Убедитесь, что все потоки получают блокировки или другие ресурсы в том же порядке. Это позволяет избежать сценария взаимоблокировки, когда поток 1 удерживает блокировку A и требует блокировки B, в то время как поток 2 удерживает блокировку B и требует блокировки A. С иерархией блокировки оба потока должны были бы получить блокировки в том же порядке (например, A до B) ,
Существует так называемый Banker's algorithm, для предотвращения взаимоблокировки. Также вы можете рассмотреть использование Watch Dog, чтобы вырваться из тупика. Here также мало интересных точек.
Почему нет Upvote для этой сущности! – 8090PZ
Лучшей практикой было бы определение класса для вашего потока и использование только нестатических полей этого класса в вашем потоке, чтобы ваши потоки не делили память.
Конечно, во избежание тупиков вы также можете избежать использования семафоров, критических секций и мьютексов. Меньше, если вы хотите избежать тупиков. К сожалению, они требуются, если какая-либо память или другой ресурс разделяется между двумя потоками, иначе вы рискуете повреждением данных.
Есть four conditions, которые должны произойти в тупике произойти:
Взаимное условие исключения: ресурс, который не может быть использован более чем одним процессом, в то время
Удержание и ждать условие: процессы, которые уже имеют ресурсы, могут запрашивать новые ресурсы
Отсутствие условия превенции: ни один ресурс не может быть принудительно удален из процесса, удерживающего его, ресурсы могут быть освобождены только посредством e Xplicit действие процесса
Круговая состояние ожидания: два или более процессы образуют круговую цепь, где каждый процесс ожидает ресурс, что следующий процесс в цепи имеет место
Избегайте по крайней мере один из них , и желательно больше, и у вас не должно быть слишком много проблем.
Среди различных способов ввода критических разделов наиболее популярны семафоры и мьютексы.
Семафор механизм ожидания и мьютекс механизм блокировки, а понятие сбивает с толку больше всего, но в общем, поток активации мьютекс может только отключить его. с этим ...
Не разрешайте любому процессу блокировать частичное количество ресурсов, если для процесса требуется 5 ресурсов, дождитесь, пока все они будут доступны.
- Если вы используете семафор здесь, вы можете разблокировать/отключить ресурс, занятый другим потоком. под этим я подразумеваю, что превенция - еще одна причина.
Эти 2 согласно мне являются основными условиями, остальные 2 из общих 4 мер предосторожности могут быть связаны с ними.
Если вы не согласны с ps, добавьте комментарии. Я уже закончил gtg, позже добавлю более чистое и понятное объяснение.
- 1. Избегайте взаимоблокировок MySQL/UniDAC/Delphi
- 2. Синхронизация в fork() ed многопоточном процессе
- 3. PEM_write_X509 (x509 *) и сбой в многопоточном процессе
- 4. Запуск хранимой процедуры в многопоточном процессе
- 5. Как преобразовать две программы в многопоточном процессе
- 6. Избегайте потери данных в многопоточном UDP-сервере
- 7. Избегайте нескольких экземпляров в рабочем процессе Ax2009
- 8. В многопоточном процессе, когда «[Переключение на поток]» в gdb?
- 9. Какие компоненты состояния программы совместно используются потоками в многопоточном процессе?
- 10. Почему я должен правильно завершать все потоки в многопоточном процессе?
- 11. Maven - выполнить отдельный тестовый класс в отдельном многопоточном процессе jvm
- 12. C# Локальные кучи для потоков в многопоточном процессе
- 13. Избегайте таймаута при длительном процессе формирования отчета
- 14. Получение взаимоблокировок в MySQL
- 15. Понимание взаимоблокировок в java
- 16. Получение взаимоблокировок в sqlserver
- 17. ОС запускает процессы уничтожения при многопоточном процессе python
- 18. Java: URLConnection setRequestProperty range issue, основанный на многопоточном процессе?
- 19. Необходимые и достаточные условия для возникновения взаимоблокировок
- 20. Предотвращение взаимоблокировок в SQL Server
- 21. Фиксация взаимоблокировок в беспорядочном коде
- 22. Как избежать этих взаимоблокировок?
- 23. Каковы общие причины взаимоблокировок?
- 24. Сделки - Как избежать взаимоблокировок?
- 25. Обнаружение взаимоблокировок Приложение WinForms
- 26. Каковы типы взаимоблокировок?
- 27. Базовый выбор самих взаимоблокировок
- 28. Как избежать взаимоблокировок?
- 29. Правильный способ использования mongodb в многопоточном приложении
- 30. Дополнительный отладочный вывод в многопоточном приложении - я имею в виду * для клиента *, а не для определения взаимоблокировок или ошибок.
Возможный дубликат [Каковы распространенные причины взаимоблокировок?] (Http://stackoverflow.com/questions/528303/what-are-common-reasons-for-deadlock) –