Шаг 33 - Инструкции Lock и Unlock

Управляют доступом других процессов ко всему файлу, открытому с помощью инструкции Open, или к его части.

Lock [#]номерФайла[, диапазонЗаписей]
. . .
Unlock [#]номерФайла[, диапазонЗаписей]

Параметры
номерФайла
Обязательный. Любой допустимый номер файла.
диапазонЗаписей
Необязательный. Диапазон записей, которые следует заблокировать или разблокировать.

Замечания
Инструкции Lock и Unlock используются в средах, в которых нескольким процессам может понадобиться доступ к одному и тому же файлу.
Инструкции Lock и Unlock всегда используются парами. Аргументы инструкций Lock и Unlock, образующих пару, должны полностью совпадать.
Первой записи (или байту) файла соответствует номер 1, второй 2 и т.п. Если указана только одна запись, то блокируется или разблокируется только одна эта запись. Если диапазон записей указан, но опущен аргумент начало, блокируются или разблокируются все записи от первой записи до конца диапазона (конец). Вызов инструкции Lock без аргумента номерЗаписи блокирует весь файл. Вызов инструкции Unlock без аргумента номерЗаписи приводит к снятию блокировки со всего файла.
Если файл открыт для последовательного ввода или вывода, инструкции Lock и Unlock блокируют или разблокируют весь файл, независимо от наличия остальных аргументов.
Перед закрытием файла или завершением работы с программой не забудьте удалить все блокировки с помощью инструкции Unlock. Несоблюдение этого правила может привести к непредсказуемым последствиям.

Пример
В данном примере с помощью инструкций Lock и Unlock запрещается доступ других процессов к записи на время ее изменения. Предположим, что файл TESTFILE содержит пять записей определенного пользователем типа Record.

Type Record				' Тип, определенный пользователем.
	ID As Integer
	Name As String * 20
End Type

Dim MyRecord As Record, RecordNumber	' Объявляет переменную.
' Открывает файл произвольного доступа.
Open "TESTFILE" For Random Shared As #1 Len = Len(MyRecord)
RecordNumber = 4				' Определяет номер записи.
Lock #1, RecordNumber			' Блокирует запись.
Get #1, RecordNumber, MyRecord		' Читает запись.
MyRecord.ID = 234				' Изменяет запись.
MyRecord.Name = "Иван Петров"
Put #1, RecordNumber, MyRecord		' Записывает измененную запись.
Unlock #1, RecordNumber			' Разблокирует текущую запись.
Close #1					' Закрывает файл.

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.