@Andrey_Epifantsev

Как создавать файл блокировки на диске?

Я пишу программу синхронизирующую содержимое папок на диске. Для того, чтобы исключить одновременный доступ нескольких экземпляров программы к одной папке, я создаю lock-файл. Если при обращении к директории программа видит там lock файл, то это означает, что с этой директорией уже кто-то работает и она не будет работать с этой директорией, а будет ждать пока lock файл не будет удалён.

Меня беспокоит такой вопрос: теоретически возможна ситуация, когда мы проверяем наличия файла на диске и видим, что его нет и создаём его сами, но в промежутке времени между проверкой и созданием файла он был создан другим экземпляром программы. В результате две программы уверены, что они владеют содержимым папки и будут изменять его одновременно не догадываясь об этом.

Как можно было бы исключить эту ситуацию? Или эта ситуация невозможна?

Использовать для решения функции специфичные для конкретных ОС нежелательно, так как общая папка может быть, например, сетевым диском WebDav или чем нибудь подобным.
  • Вопрос задан
  • 41 просмотр
Решения вопроса 1
@rPman
При открытии файла fopen с режимом "x" если файл существует - будет возвращена ошибка.

Соответственно спокойно открываешь файл, если вернулась ошибка, ждешь и повторяешь попытки в цикле, если открылся - тут же закрываешь и работаешь с директорией, по окончанию работы файл удаляешь. Обе операции атомарные.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы