Так как размер вашего файла относительно меньше и вам приходится иметь дело с количеством файлов, лучшим вариантом будет создание двух потоков:
1. First thread reading and processing only files placed at even number
in the file listing (ls -l in *nix).
2. Second thread reading the oddly placed file in the listing.
Недостаток:метод, который вы упомянули о «одном потоке, читающем данные в вектор, а другом потоке, читающем из него», состоял бы в том, что вам нужно будет заботиться о расах потоков и предотвращать их, используя переменные мьютекса и условия.
Где, поскольку этот метод не требует какой-либо блокировки [Надеюсь, что нет никакой зависимости между данными между файлами]
Кроме того, более быстрый способ чтения данных из файла состоял бы в двоичном считывании файла в буфер подходящего размера.размер.
Надеюсь, ответ поможет вам.
** РЕДАКТИРОВАНИЕ: **
В соответствии с вашим комментарием, кажется, вам придется идти с одним потоком, считывающим данные в структуру данных очереди [возможно, очередь из буфера символов] и второй потокчтение данных из очереди и их обработка.
Как упоминалось ранее, проблема заключается в чтении и записи из той же очереди, в которой контейнеры STL не являются поточно-ориентированными.
Итак, что я могу порекомендовать здесь, так это управлять вашей общей структурой данных, то есть очереди здесь, используя locaks, и все остальное:
1. Boost Lock free : <a href="http://tim.klingt.org/boost_lockfree/lockfree/introduction.html" rel="nofollow"> Boost lock free </a>
2. Write your own loack free implementation : <a href="http://drdobbs.com/architecture-and-design/210604448" rel="nofollow"> Lock free impl </a>