Обработка одного и того же файла в двух потоках с использованием ifstream

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

Я сразу могу придумать два способа:

  1. Создать новый ifstream для второго потока, открыть его в том же файле.
  2. Совместное использование одного экземпляра открытого ifstream в обоих потоках (например, с помощью boost :: shared_ptr <> ). Найдите соответствующее смещение файла, в котором текущий поток в настоящее время интересуется, когда поток получает временной интервал.

Один из этих двух методов предпочтителен?

Есть ли третий (или четвертый) вариант, который у меня еще нет. думали о?

Очевидно, что я в конечном итоге ограничен тем, что жесткий диск должен вращаться взад и вперед, но то, что меня интересует (если возможно), - это кэширование диска на уровне ОС одновременно при обоих смещениях файлов.

Спасибо.

5
задан ypnos 2 June 2011 в 15:33
поделиться