Как управлять параллелизмом на ресурсе файловой системы из двух разных программ (в разных адресных пространствах)? - PullRequest
0 голосов
/ 10 января 2011

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

Ну, как вы, несомненно, понимаете, это общий ресурсвопрос ресурса, но как с этим справиться?Ну, я пришел к решению.

Когда программа должна читать / писать, просит другое приложение (через TCP) и получает ok-go или повторную попытку позже.Ну, мне было интересно, можно ли было использовать другой подход.Я также думал о периодической отправке содержимого файла программе, которая читает файл (потому что один пишет, а другой только читает).

Я также думал о том, что не нужно заботиться о параллелизме.Хорошо, возможно, что программа, которая читает файл, будет читать непоследовательный файл, если вы считаете, что файл является XML-файлом, проблема еще больше, предположим, что пишущая программа не закончила писать закрывающий тег иПрограмма чтения пытается прочитать содержимое.Будет получено исключение: не правильно сформированное файловое исключение или подобное :) Но так ли это плохо ??Если это произойдет, я закрою файл, установлю таймер и попробую позже.Разве это не правильный подход (конечно, он быстрый), он также может оказаться лучшим подходом.Что вы думаете об этом?

Есть ли действительный алгоритм, используемый для таких случаев?

Спасибо.

1 Ответ

1 голос
/ 11 января 2011

Это звучит как хороший пример использования для блокировки файлов.Использование блокировок файлов зависит от ОС, поэтому отметьте запись в Википедии , чтобы указать правильное направление.

Блокировки можно использовать следующим образом: когда ваш писатель хочет изменить файлОн получает эксклюзивную блокировку файла, изменяет его и разблокирует.Когда читатель хочет прочитать файл, он получает общую блокировку, читает его, а затем разблокирует его.Если вашей программе не удается получить блокировку, она должна либо (1) заблокировать, пока не получит блокировку, либо (2) повторить попытку позже, в зависимости от того, что приемлемо для вашей программы и что предоставляет ваша ОС.

Это сохраняет ваши данные непротиворечивыми, независимо от механизма, который вы используете для уведомления программ о повторном чтении файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...