Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разделяемый и исключительный режим блокировки
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Max Street
Доброго времени суток! Вопрос по управляемым транзакционным блокировкам

Есть всего 2 режима: разделяемый и исключительный. При этом разделяемая блокировка устанавливается для того, чтобы данные не были изменены другими транзакциями. Исключительная блокировка, помимо этого, обеспечивает запрет не только изменения этих данных, но даже их чтения другими транзакциями, устанавливающими управляемые блкировки.

Помогите, пожалуйста, уловить разницу между двумя режимами. Объясните "на пальцах", в каком случае какой режим используется.

Спасибо за внимание. За ответы и советы премного благодарен smile.gif

Petre
Первый - для чтения, второй - для чтения и дальнейшего изменения (записи).
Max Street
Спасибо. То есть правильно ли я понимаю, если я только читаю данные регистра, но не изменяю их - накладываю разделяемую блокировку, если я читаю данные регистра, а затем записываю в этот регистр/изменяю записи или удаляю их - накладываю исключительную блокировку?
pablo
Для чтения данных из регистра не нужно накладывать блокировку. Блокировка вообще нужна только для случаев разделенного доступа по записи к одной и той же записи регистра. Блокировка того или иного вида нужна только при записи данных в регистр.
Petre
Лучше идти от обратного:

Если нам нужна блокировка при записи, используем исключительную.
Если нам нужна блокировка при чтении, исключительную использовать не целесообразно - используем разделяемую.
Если нам не нужна блокировка при чтении - не используем.
Max Street
Может я сегодня дико туплю, но объясните, пожалуйста, еще раз - я уже голову сломал smile.gif

С исключительным режимом более менее понятно: при чтении данных из регистра, а потом добалвении новой записи или изменении существующей накладывается исключительная.

Если это правильно, для чего же используется разделяемая блокировка? Ведь

Цитата
при чтении данных из регистра не нужно накладывать блокировку


а при изменении данных - исключительная.

Для чего же тогда разделяемая блокировка? и в каких случаях она используется?

Petre
Цитата(Max Street @ 11.04.13, 21:49) необходимо зарегистрироваться для просмотра ссылки
при чтении данных из регистра не нужно накладывать блокировку

Эту фразу надо понимать так: чтобы прочитать таблицу, наложение блокировки вовсе не обязательно.

Разделяемая блокировка используется в том случае, если надо на некоторое время заблокировать изменение данных, т. е. чтобы они на какое-то время оставались неизменными. Какие-нибудь сложные запросы с повторным чтением одних и тех же таблиц или связаных таблиц, или ожидание записи связаных таблиц -ведь транзакцию можно и откатить.
Конечно, в данной ситуации можно наложить и исключительную блокировку, но в этом случае заблокированные объекты нельзя будет даже прочитать другими процессами - возникнут ожидания и избыточные блокировки. Поэтому разделяемый режим является таким себе компромисом.
Max Street
Спасибо. Теперь вроде бы разобрался. В качестве итога: если я изменяю(добавляю/удаляю) записи регистра, то накладываю исключительную. Если требуется лишь прочитать данные, но по какой-либо причине оставить их неизменными до конца транзакции, то накладываю разделяемую блокировку. Правильно?

Petre
Точно.
Max Street
Спасибо большое за помощь smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.