14.39 Разделение доступа к файлам в системе CVS contents

14.39 Разделение доступа к файлам в системе CVS

Для получения представления как работают блокирующие средства в CVS полезно посмотреть раздел Замечания по одновременному использованию. В данном разделе мы ориентируемся на лиц, которые разрабатывают программные средства, имеющие доступ к хранилищу CVS предотваращая одновременно доступ других программ к хранилищу.

Любой файл в хранилище с именем начинающимся на #cvs.rfl является блокиратором чтения. Любой файл в хранилище с именем начинающимся на #cvs.wfl является блокиратором записи. Каталог с именем начинающимся на #cvs.lock служит главным блокиратором. Иными словами, необходимо иметь этот каталог прежде, чем создавать любые блокираторы.

Например, надо создать блокиратор по чтению. Сначала мы созда©м каталог #cvs.lock. Если такой файл уже существует, то следует подождать немного, а потом снова попытаться создать этот же каталог. После того как каталог #cvs.lock создан, пробуем создать файл, чь© имя начинается на #cvs.rfl, за которым следует, например, имя хоста или номер процесса. После создания файла можно удалить главный блокиратор (каталог #cvs.lock), чтобы дать возможность другим процессам тоже создавать блокираторы. Затем вы читаете хранилище. Когда чтение закончено, то файл, который вы создали ранее (начинающийся на #cvs.rfl), тоже должен быть удал©н, чтобы разрешить чтение другим процессам или пользователям.

Чтобы организовать блокиратор по записи, вам необходимо сначала создать главный блокиратор как при чтении. Когда главный блокиратор создан, то надо проверить есть ли блокиратор чтения (файл, имя которого начинается на #cvs.rfl). Если такие файлы есть, то следует удалить главный блокиратор и подождать какое-то время, а затем попробовать вс© снова.

Если файлов типа #cvs.rfl нет, то создать файл, начинающийся комбинацией #cvs.wfl, за которой следует информация по вашему выбору (как в случае с блокиратором чтения). Оставить каталог (не удалять) главного блокиратора (#cvs.lock. Записывайте данные в хранилище. Когда операция записи закончится, то удалите сначала файл #cvs.wfl, а затем каталог #cvs.lock.

Заметим, что каждый блокиратор (на чтение или на запись) блокирует соответствующую операцию лишь с одним подкаталогом хранилища, не включая наследников или родителей. Если вам потребуется блокировать все дерево каталогов, то необходимо будет блокировать все подкаталоги. Естественно, после завершения операции, все подкаталоги следует разблокировать. Если при блокировании всего дерева каталогов оказалось, что какие-то подкаталоги блокированы кем-то ещ©, то вам следует вс© уже заблокированное разблокировать, а затем, после некоторого ожидания, снова попытаться блокировать вс© дерево. Это следует делать во избежание взаимного блокирования (м©ртвого блокирования или клинча).

CVS предполагает блокирование по записи отдельных файлов типа *,v.


contents Обновлено: 16.03.2015