Общее решение для предотвращения взаимоблокировки в коде состоит в том, чтобы убедиться, что последовательность блокировки происходит обычным образом, независимо от того, какой поток обращается к ресурсам.
Например, заданные потоки T1 и T2, где 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...
Мой вопрос в том, что другие методы, шаблоны или распространенные методы используются для кодирования, чтобы гарантировать предотвращение блокировки блокировки?