Последовательный порядок блокировки - это первое и последнее слово, когда речь идет об избежании тупиков.
Существуют смежные методы, такие как программирование без блокировки (когда ни один поток не ожидает блокировки, и, следовательно, нет возможности цикла), но на самом деле это всего лишь частный случай правила «избегать несогласованного порядка блокировки» - - т.е. они избегают непоследовательной блокировки, избегая всей блокировки. К сожалению, у программирования без блокировки есть свои проблемы, так что это не панацея.
Если вы хотите немного расширить область действия, существуют методы обнаружения взаимоблокировок, когда они возникают (если по какой-то причине вы не можете спроектировать программу, чтобы избежать их), и способы устранения взаимоблокировок, когда они возникают ( например, всегда блокируя по таймауту, или заставляя один из заблокированных потоков, чтобы их команда Lock () потерпела неудачу, или даже просто убивая один из заблокированных потоков); но я думаю, что они все значительно уступают тому, чтобы просто не допустить возникновения взаимных блокировок.
(кстати, если вы хотите автоматизированный способ проверить, есть ли в вашей программе потенциальные взаимоблокировки, проверьте инструмент helgrind от valgrind. Он будет отслеживать шаблоны блокировки вашего кода и уведомлять вас о любых несоответствиях - очень полезно)