#ProducerConsumerBuf

Главный поток создает 2 побочных потока.

1й поток берет из входного файла строку и добавляет ее в буфер;
2й поток берет из этого буфера строку и выводит её в выходной файл, добавляя номер строки в начале.

1й поток завершается, когда конец файла;
2й - когда в буфер больше не поступает данных. Главный - после отработки двух побочных.

Буфер реализован на стандартной очереди std::queue.