Не видя код, его трудно комментировать, но ошибку взаимоблокировки базы данных будет очень трудно (если не невозможно) создать в однопоточной программе, даже если у вас два соединения.
Воднопоточная программа
- Соединение A блокирует строку R1.
- Соединение B блокирует строку R2.
- Соединение A пытается заблокировать строку R2 и ожидает
Он не достиг состояния тупика, потому что Соединение A просто ожидает Соединение B. База данных не знает, что оба соединения с базой данных принадлежат одному процессу / потоку, поэтому она не знает, что они заблокированы.
Эта проблема иногда возникает с пулами соединений.Один сеанс конечного пользователя блокирует общий ресурс, используя соединение из пула.Другие соединения пула заполняют все ожидания этого общего ресурса, а затем в исходном сеансе конечного пользователя не удается получить поток пула соединений для освобождения ресурса.