2013-06-11 2 views
0

У меня есть статический класс, который содержит ряд функций, которые считывают значения из файлов конфигурации. Конфигурационные файлы снабжены программным обеспечением и самим ПО, которые НИКОГДА не записываются в них.Доступ к файлам для чтения из потоков

У меня есть ряд потоков, работающих в моем приложении, и мне нужно вызвать функцию в статическом классе. Затем функция перейдет в один из файлов конфигурации, найдите значение (в зависимости от параметра, который я передаю при вызове функции), а затем верну результат.

Мне нужны потоки, чтобы иметь возможность читать файл в одно и то же время (точнее, без синхронизации с основным потоком). Нити никогда не будут записываться в файлы конфигурации.

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

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

+1

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

+0

Файл конфигурации содержит сотни строк информации. Я передаю значение в функцию, которая читает файл и возвращает информацию о конфигурации, относящуюся к переданному мне значению. Я думаю, что время от времени запоминать файл не так, как хранить содержимое в памяти, учитывая, что я не нужно всю информацию все время. – Jeedee

+0

В целом я ценю тот факт, что вы стремитесь создать оптимизированное программное обеспечение, но вы работаете с программным обеспечением Delphi, что обычно означает, что ваш код уже более десяти лет, и он будет работать еще в течение десятилетия. Сегодня вы можете получить 24 ГБ за менее чем 80 евро, поэтому лучше подумайте дважды, прежде чем жертвовать ремонтопригодностью своего программного обеспечения, чтобы сэкономить несколько килобайт ОЗУ. –

ответ

0

Да, эта МОЖЕТ быть проблемой, в зависимости от того, как класс фактически находит и читает файлы, и тем более, если класс также кэширует значения, поэтому ему не нужно читать из файлов каждый раз. Не видя фактического кода вашего класса, вы не можете сказать, является ли ваш код потокобезопасным или нет.

+0

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

+0

Если функция повторно открывает файл, считывая соответствующие данные из него, а затем закрывая файл перед выходом (что само по себе, если не очень эффективная модель для ввода-вывода файлов), то это, как правило, поточно-безопасное пока функция использует локальную переменную для дескриптора файла/указателя.Каждый доступ к файлу будет использовать другой дескриптор/указатель файла для доступа к данным, и это будет поточно-безопасным. –

+0

Как я и думал (хотя у меня было несколько сомнений). Спасибо за подтверждение! – Jeedee

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