D3 Reference Manual

Index | Help

Поиск по страницам

Разделы / Общие сведения / locking scheme

locking scheme

Типы блокировок D3

D3 обеспечивает три типа блокировок групп (group locks) и один тип блокировки записей (item lock). D3 блокирует группы на основе процессов. Порт, выполняющий программу, не может обращаться к записям, заблокированным на предыдущем уровне.

Блокировка группы на обновление

Если установлена блокировка группы на обновление (update lock), никакой другой процесс не может обратиться к группе для записи или чтения.

Блокировка группы “только для чтения”

Если группа заблокирована “только для чтения”, блокировки на обновление не допускаются. В любой момент времени несколько процессов могут установить несколько блокировок группы “только для чтения”.

Блокировка записи

Если блокируется запись файла, чтение и обновление других записей файла разрешены. Группа блокируется для предотвращения сдвига ее содержимого. Затем блокируется запись, а блокировка группы снимается. Блокировка записи остается. Блокировка записей используется командами "readu", "readvu" и "matreadu" языка FlashBASIC и процессором обновления (UP).

Примеры:

Следующая программа показывает использование предложения "locked" языка FlashBASIC. Показано, как вывести имя файла, номер порта и пользователя, установившего блокировку файла:

prompt "";item=""
open '','filename' to f.filename else stop
open '','users' to f.users else stop
readu item from f.filename,ID locked
  execute "who ":port capturing var
  user.id = field(var," ",2)
  readv name from f.users,user.id,1 else stop
  print "Filename file is locked by port ":port:" ":name
  loop until port = 0 do
    sleep 5
    readu item from f.filename,ID locked else null
    port=system(0)
   repeat
end else stop 202,ID
release
stop 
end