Difference between revisions of "Template:Типы блокировок системы"

From SunFlurry wiki
Jump to: navigation, search
1>Admin
m (1 revision imported)
 
(No difference)

Latest revision as of 12:43, 14 June 2024

Тип блокировки Разрешено вложение Примеры функций Описание
Блокировка объектов на уровне системы Да (объект будет разблокирован после такого же количества вызовов UnlockObject, сколько было вызовов LockObject) LockObject, UnlockObject, LockCount Производится блокировка доступа к объекту из других потоков. Используется, когда для сохранения непротиворечивого состояния объекта необходимо сделать более одного изменения, к примеру, изменить в строке таблицы, которая используется в других потоках, сразу несколько значений. Если достаточно изменить только одно значение, не имеет смысла использовать подобную блокировку, так как система самостоятельно блокирует сложные объекты при их чтении или записи. Требуется конструкция Try ... Finally, чтобы снять блокировку гарантированно.
Блокировка визуальных элементов форм Нет (Unlock всегда разблокирует, вне зависимости от количества вызовов Lock) Tab.Lock, Tab.Unlock, List.Lock, List.Unlock, Tree.Lock, Tree.Unlock, Table.Lock, Table.Unlock, Picture.Lock, Picture.Unlock Производится блокировка трансляции изменений на экран, сделанных в объекте в программе. Данная блокировка используется для ускорения работы с объектами, которые уже выведены на экран. Если электронная таблица еще не выведена на экран, нет никакого смысла проводить такую блокировку, так как она не ускорит работы с таблицей. Требуется конструкция Try ... Finally, чтобы снять блокировку гарантированно.
Блокировка объектов базы данных N/A DB.Lock, DB.Unlock, MassLockWithWait, MassUnlock Производится блокировка объекта базы данных на сервере. Клиент выполняет такую блокировку автоматически, когда пользователь открывает элемент справочника или документ визуально. Программная блокировка необходима, если нужно заблокировать группу объектов до их изменения, либо необходимо произвести несколько последовательных изменений в одном объекте. После блокировки объекта, если это не новый объект, рекомендуется загрузить его содержимое заново с помощью DB.Reload, чтобы избежать записи устаревшей информации и, тем самым, утери более свежих изменений. Разблокировка происходит при удалении объекта из системы, закрытии визуально закрытого объекта, либо вызове функции разблокировки.
Блокировка накопителей и определенных видов объектов. N/A LockStorage, UnlockStorage, LockDBPath, UnlockDBPath Производится блокировка накопителя или другого объекта для всех пользователей системы. Блокировка используется перед критической проверкой содержания накопителя, для того, чтобы убедиться, что после проверки перед записью накопитель не был изменен. Такая блокировка обычно сопровождается транзакцией BeginTransaction, даже без вызова LockStorage, она инициируется автоматически при вызове некоторых функций, типа ClearStorages, SaveStorage. Разблокировка происходит автоматически при окончании транзакции, ошибке или окончании выполнения программного модуля. Более подробную информацию см. в статье LockStorage.
Блокировка серверных семафоров N/A DBLockStringMutex, DBUnlockStringMutex, MassLockWithWait, MassUnlock Производится блокировка именованных семафоров на сервере. Блокировка необходима, если нужно заблокировать доступ к процессу, не связанному с элементами базы данных (например, к файловому каталогу на сервере). Требуется конструкция Try ... Finally, чтобы снять блокировку гарантированно.
Транзакции базы данных Да (фактически транзакция будет зафиксирована после такого же количества CommitTransaction, сколько было вызовов BeginTransaction, однако, RollbackTransaction отменяет все уровни транзакции). BeginTransaction, CommitTransaction, RollbackTransaction Блокировка изменения любых таблиц на сервере базы данных для других клиентов, после того, как они были изменены текущим внутри транзакции, называется блокировкой транзакции. Транзакция может окончится принятием изменений, сделанных внутри нее, либо отказом от них, после чего, таблицы становятся доступными для записи других клиентов. Транзакция может происходить очень незаметно для других клиентов, а может замедлять скорость работы всех пользователей системы, в зависимости от типа объекта, для которого она происходит. По умолчанию работа клиента на сервере базы данных идет вне транзакции, однако, при записи изменений в объекты, сервер базы данных может создавать кратковременную транзакцию (хотя практически, это не делается, так как сервер разграничивает доступ клиентов с помощью внутреннего механизма блокировок). Транзакция, однако, создается сервером автоматически при обработке документов, причем, при этом происходит блокировка не отдельных объектов, а видов объектов (накопителей), поэтому, корректная оптимизация кода обработки документов очень важна. Программа использует транзакции, когда результат записи изменений множества связанных объектов нельзя предсказать заранее. Требуется конструкция Try ... Finally, чтобы окончить транзакцию гарантированно, иначе транзакция будет отменена системой автоматически после окончания выполнения кода.
Блокировка системных семафоров N/A Mutex.CreateMutex Производится блокировка системного семафора, что позволяет исключить доступ к одному и тому же имени для двух или более запущенных клиентов на одной и той же машине, либо позволяет производить простое разграничение доступа между клиентом и другими приложениями. Разблокировка происходит при удалении объекта из системы.