Как избежать dead lock. Способ 2. Дополнительный монитор

Как избежать dead lock. Способ 2. Дополнительный монитор

Когда невозможно решить какой из ресурсов нужно захватить первым, можно ввести дополнительный монитор. Тогда сначала будет захватываться этот монитор, а потом уже требуемые ресурсы, не важно в каком порядке. Если другому потоку потребуются эти же ресурсы, сначала он попытается захватить дополнительный монитор, не сможет этого сделать и перейдёт в режим ожидания.

Проблема вроде решена, но этот дополнительный монитор становится узким местом в системе, на котором все потоки будут зависать в ожидании. Например, есть 5 банковских аккаунтов: первый что-то предаёт во второй, четвёртый в пятый. Между собой они не связаны, но четвёртый и пятый аккаунты будут ждать освобождение дополнительного монитора. В итоге получается однопоточное приложение. Зачем же тогда многопоточность?
Эту проблему можно решить более высокоуровневыми конструкциями – гибким захватом ресурсов.
Многопоточность