Общее решение для предотвращения тупиковой ситуации в коде - убедиться, что последовательность блокировок происходит обычным образом, независимо от того, какой поток обращается к ресурсам.
Например, данные потоки T1 и Т2, где T1 обращается к ресурсу A, а затем B и T2 обращаются к ресурсу B и затем A. Блокировка ресурсов в том порядке, в котором они необходимы, вызывает тупиковую блокировку. Простое решение - заблокировать A, а затем заблокировать B, независимо от того, в каком порядке поток будет использовать ресурсы.
Проблемная ситуация:
Thread1 Thread2
------- -------
Lock Resource A Lock Resource B
Do Resource A thing... Do Resource B thing...
Lock Resource B Lock Resource A
Do Resource B thing... Do Resource A thing...
Возможное решение:
Thread1 Thread2
------- -------
Lock Resource A Lock Resource A
Lock Resource B Lock Resource B
Do Resource A thing... Do Resource B thing...
Do Resource B thing... Do Resource A thing...
Мой вопрос: какие еще методы, шаблоны или общепринятые практики используются в кодировании, чтобы гарантировать предотвращение тупиковых ситуаций?