повысить предотвращение состояния межпроцессной гонки

У меня возникают проблемы с кодом, который время от времени выдает следующее исключение:

boost interprocess: no such file or directory

Есть несколько кодов, обращающихся к одному и тому же набору файлов, но некоторые коды будут перемещать файлы в разные каталоги в режиме реального времени. Коды, обрабатывающие и перемещающие файлы, используют блокировки файлов, например.

boost::interprocess::file_lock

Процесс, происходящий в коде, выглядит следующим образом: 1) Программа 1 проверяет, существует ли файл, который она хочет заблокировать 2) Если вышеуказанная проверка проходит успешно, она затем блокирует файл, используя file_lock

Я думаю, проблема в том, что между шагами 1 и 2 программа 2 может использовать boost::filesystem::rename для файла, над которым работает программа 1, и переместить его.

Если обе программы работают одновременно, есть ли способ предотвратить это?


person user788171    schedule 26.06.2012    source источник


Ответы (1)


Не проверяйте, существует ли файл перед блокировкой. Вместо этого просто попытайтесь заблокировать его; если файл не существует, Boost выдаст interprocess_exception предупреждение о том, что файл заблокирован.

person Collin Dauphinee    schedule 27.06.2012
comment
Я думаю, что это неправильно: файл тогда не заблокирован, его просто не существует под таким именем. - person pbhd; 17.09.2018