Каковы общие причины тупиков? - PullRequest
39 голосов
/ 09 февраля 2009

Замки трудно найти и их очень неудобно удалять.

Как я могу найти источники ошибок для взаимоблокировок в моем коде? Есть ли какие-то «тупиковые паттерны»?

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

Ответы [ 12 ]

0 голосов
/ 12 февраля 2014

В моем последнем проекте я столкнулся с проблемой взаимоблокировок в базе данных сервера SQL. Проблема в обнаружении причины была в том, что мое программное обеспечение и программное обеспечение сторонних производителей используют одну и ту же базу данных и работают на одних и тех же таблицах. Было очень сложно выяснить, что вызывает тупики. В итоге я написал SQL-запрос, чтобы выяснить, какие процессы и какие SQL-операторы вызывают взаимоблокировки. Вы можете найти это утверждение здесь: Взаимные блокировки на SQL-сервере

0 голосов
/ 08 ноября 2013

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

Обязательно завершите операцию после снятия блокировки. Если у вас есть несколько блокировок, например, порядок доступа ABC, порядок освобождения также должен быть ABC.

...