Блокировка базы данных метакита в TCL - PullRequest
0 голосов
/ 12 сентября 2011

Какой предпочтительный способ заблокировать базу данных Metakit из TCL?

В основном у меня есть приложение, которое читает / пишет из файла базы данных Metakit, и я беспокоюсь, что если у пользователя есть два экземплярамое приложение работает, они могут повредить базу данных (выполнив две записи одновременно).

Я знаю, что мог бы использовать сокеты для связи между экземплярами, но я бы предпочел, чтобы это не конфликтовало с существующим программным обеспечением.на ПК.Я также думал об использовании файла блокировки, но в случае сбоя процесса база данных будет заблокирована навсегда.Я знаю, что в UNIX обычно записывают PID в файл блокировки, но я не знаю, как определить, выполняется ли процесс все еще в кросс-платформенном режиме.Моя основная цель - Windows.

Я не совсем против добавления некоторого нативного кода (скомпилированного двоичного кода C), но подумал, что сначала может быть лучший способ чистого TCL.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

Описание со страницы Metakit на коммитах говорит о том, что существует ряд режимов доступа, которые могут использоваться для одновременной работы нескольких считывателей с одним устройством записи (возможно, с использованием блокировки под капотом). Стандартный метакит достаточно осторожен, чтобы не оставлять свои файлы в несогласованном состоянии, поэтому я ожидаю, что он справится со всеми этими аспектами достаточно хорошо. Что я не знаю, так это то, как функции, обсуждаемые на этой странице, доступны для сценариев Tcl.

0 голосов
/ 13 сентября 2011

Использование файла блокировки не так уж и необычно; даже если сбой базы данных может затруднить ее разблокирование. Есть несколько простых способов решения этой проблемы.

  • поместите замок в место, которое очищается после перезагрузки; /tmp для Unix
  • Если приложение открывается и обнаруживает, что блокировка все еще открыта; рассказать пользователю, что происходит, и предложить, как это исправить; предложить удалить файл блокировки (после выдачи достаточного предупреждения) или сообщить пользователю, где он находится, чтобы они сами рискнули удалить его.
...