Processa o mesmo arquivo em dois threads usando ifstream
Tenho um arquivo de entrada no meu aplicativo que contém uma grande quantidade de informações. A leitura sequencial e apenas um deslocamento de arquivo por vez não é suficiente para o uso do meu aplicativo. Idealmente, eu gostaria de ter dois threads, que têm @ separados e distintifstream
s lendo dois deslocamentos de arquivo exclusivos do mesmo arquivo. Eu não posso simplesmente começar umifstream
, e faça uma cópia usando o construtor de cópias (uma vez que não pode ser copiado).Então, como faço para lidar com isso?
Imediatamente consigo pensar em duas maneiras,
Construa um novoifstream
para o segundo segmento, abra-o no mesmo arquivShare uma única instância de umifstream
nos dois segmentos (usando, por exemplo,boost::shared_ptr<>
). Procure o deslocamento de arquivo apropriado no qual o encadeamento atual está interessado no momento, quando o encadeamento receber uma fatia de tempo.Um desses dois métodos é preferido?
Existe uma terceira (ou quarta) opção em que ainda não pense
Obviamente, em última análise, estou limitado pelo fato de o disco rígido ter que girar para frente e para trás, mas o que estou interessado em tirar proveito (se possível) é de algum cache de disco no nível do SO em ambos os deslocamentos de arquivo simultaneament
Obrigado