У меня есть хранимая процедура, и я хочу убедиться, что она не может быть выполнена одновременно.
My (многопоточное) приложение выполняет всю необходимую работу над базовой таблицей с помощью этой хранимой процедуры.
imo, блокировка самой таблицы - это ненужное радикальное действие, поэтому, когда я узнал о sp_GetAppLock
, который по существу обеспечивает критическую секцию, это звучало идеально.
Мой план состоял в том, чтобы заключить хранимую процедуру в транзакцию и настроить spGetAppLock
с областью транзакций. Код был написан и протестирован успешно.
Код теперь предлагается для обзора, и мне сказали, что я не должен называть эту функцию. Однако, задавая очевидный вопрос "почему бы и нет?", Единственные причины, по которым я нахожусь, очень субъективны, чтобы осложнить любую форму блокировки.
Я не обязательно покупаю это, но мне было интересно, есть ли у кого-нибудь объективные причины, почему я должен избегать этого. Как я уже сказал, с учетом моих обстоятельств критический раздел звучит как идеальный подход ко мне.
ТИА, Пит
Дополнительная информация: Приложение находится поверх этого с 2 потоками T1 и T2. Каждый поток ожидает другого сообщения M1 и M2. В бизнес-логике говорится, что обработка может произойти только после того, как прибыли M1 и M2. Хранимая процедура регистрирует, что Mx прибыл (вставить), а затем проверяет, присутствует ли My (выберите). Встроенная блокировка в порядке, чтобы убедиться, что вставки происходят серийно. Но выбор также должен происходить серийно, и я думаю, что мне нужно сделать что-то сверх встроенной функции здесь.
просто для ясности, я хочу, чтобы "обработка" произошла ровно один раз. Поэтому я не могу позволить хранимой процедуре возвращать ложные срабатывания или ложные негативы. Я обеспокоен тем, что если хранимый proc работает дважды в очень быстрой последовательности, то оба "selects" могут возвращать данные, которые указывают, что это целесообразно для выполнения обработки.