HB_Tutorial_DBLock - пример действий, приводящих к DeadLock
Описание
Проект создан в дополнение к статье Базы знаний
DeadLock .
Используйте его в качестве примера, иллюстрирующего эту статью.
Использование
Проект состоит из двух примеров.
Форма HB_Tutorial_DBLock_Unconditional.

Запустив эту форму в двух приложениях, достаточно скоро вы получите DeadLock. Форма модифицирует таблицы HB_Tutorial_DBLock_TableA и HB_Tutorial_DBLock_TableB в следующем порядке:
- Начало транзакции (ttsbegin).
- Блокирование таблицы A (select for update from A).
- Блокирование таблицы Б (select for update from Б).
- Модифицирование таблицы Б (Б.update).
- Модифицирование таблицы А (А.update).
- Конец транзакции (ttscommit).
- Начало транзакции.
- Блокирование таблицы Б.
- Блокирование таблицы А.
- Модифицирование таблицы А.
- Модифицирование таблицы Б.
- Конец транзакции.</li>
После действий, отмеченных курсивом, происходит задержка, чтобы увеличить вероятность возникновения DeadLock.
Пошаговое выполнение действий.

Используйте форму HB_Tutorial_DBLock_Client для запуска конкурирующих процессов, а форму HB_Tutorial_DBLock_Control для управления ими. Форма Client может работать в следующих режимах:
= Работа с одной таблицей. Процесс будет модифицировать записи только в одной таблице.
= Работа с двумя таблицами. В этом режиме можно выбрать, с какой таблицы начинать блокировку (для модификации).
Для управления работой процессов используется форма HB_Tutorial_DBLock_Control. В этой форме в списке автоматически появляются имена процессов, начавших транзакции. С помощью кнопок «Шаг» и «Стоп» выбранному процессу можно отправить сигнал выполнить следующий шаг или остановить работу.
Для создания DeadLock запустите два работающих с двумя таблицами процесса: один из них сначала блокирует таблицу А, другой – таблицу Б.
Максим Горбунов