Я работаю над реализацией, когда несколько процессов читают обычный файл A
. Пока это происходит, начинается новый процесс P
и копирует содержимое с A
в обычный файл B
. После всех процессов, начинающихся после этого, теперь следует прочитать файл B
.
Чтобы сделать коммутатор от A
до B
, процесс P
создает временный файл T
раз B
. Все процессы проверяют, существует ли T
, где можно считывать данные (т. Е. Читать от A
, если T
НЕ существует и считывается с B
, если существует T
).
С T
файл является индикатором здесь, лучше ли использовать файл с отображением памяти, а не обычный файл для повышения производительности?Файл с отображением памяти в памяти с обычным файлом
ответ
Использование tmp-файла для синхронизации небезопасно. Проверка, если файл существует и чтение этого файла не является атомарным. Один процесс может переключать файлы сразу после того, как другой процесс завершит проверку и вот-вот прочитает.
Если вы работаете на C и разрешено использовать API IPC, вы можете установить флаг в общей памяти и защитить его с помощью семафора. Кроме того, процессы должны сигнализировать, что они закончили чтение.
В этом случае только этот уникальный процесс 'P' копирует данные с' A' на 'B'. Другие - просто читатели. Я не слишком беспокоюсь о безопасности здесь, так как «A» будет продолжать существовать в течение некоторого времени после копирования. Вопрос в том, увижу ли я большое увеличение производительности, используя флаг общей памяти по сравнению с обычным файлом (который будет длиться всего один байт). Я где-то читал, что разделяемая память не дает много улучшений при использовании небольших файлов. – adizone
Какая у вас ОС и файловая система? –
ОС - 'QNX', а обычные файлы создаются на флеш-диске. – adizone