2015-04-30 4 views
2

Я работаю над реализацией, когда несколько процессов читают обычный файл A. Пока это происходит, начинается новый процесс P и копирует содержимое с A в обычный файл B. После всех процессов, начинающихся после этого, теперь следует прочитать файл B.
Чтобы сделать коммутатор от A до B, процесс P создает временный файл T раз B. Все процессы проверяют, существует ли T, где можно считывать данные (т. Е. Читать от A, если T НЕ существует и считывается с B, если существует T).
С T файл является индикатором здесь, лучше ли использовать файл с отображением памяти, а не обычный файл для повышения производительности?Файл с отображением памяти в памяти с обычным файлом

+0

Какая у вас ОС и файловая система? –

+0

ОС - 'QNX', а обычные файлы создаются на флеш-диске. – adizone

ответ

1

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

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

+1

В этом случае только этот уникальный процесс 'P' копирует данные с' A' на 'B'. Другие - просто читатели. Я не слишком беспокоюсь о безопасности здесь, так как «A» будет продолжать существовать в течение некоторого времени после копирования. Вопрос в том, увижу ли я большое увеличение производительности, используя флаг общей памяти по сравнению с обычным файлом (который будет длиться всего один байт). Я где-то читал, что разделяемая память не дает много улучшений при использовании небольших файлов. – adizone

 Смежные вопросы

  • Нет связанных вопросов^_^