Sie haben Ihre Frage bereits beantwortet. Wenn es filestream (ifstream) ist, erhalten Sie wahlfreien Zugriff (nur lesen; Sie können den offenen Modus einstellen), sollte es kein Problem mit mehreren Threads Zugriff auf die gleiche Datei durch Öffnen von mehreren ifstreams jeweils für einen Thread. Der C++ - Standard sagt nichts über Thread-Sicherheit über ifstream aus. Wenn Sie die Methode get() für den generischen istream (socket, cin) verwenden, verbrauchen Sie einen Eingabestream. Ich sehe kein Dokument für Thread-Safe von iStream. Die Methode peek() wird den Eingabestream nicht konsumieren, aber den internen Status des iStreams ändern. Wenn mehrere Threads in demselben Stream seek() ausführen, ist das Verhalten nicht definiert. Sie sind nicht von einer internen Sperre durch die C++ - Sprache überzeugt. Die seek() imitiert im Wesentlichen eine Art Zeiger auf einen internen Puffer.
Ich würde vorschlagen, dass Sie einen Thread haben, der den istream in einen Puffer liest (konstruierte Objekte (der Produzent) oder einfacher roher Speicher), dann können mehrere Threads das Ergebnis (Consumer) konsumieren. Dies ist eine typische Synchronisation zwischen Konsumenten und Produzenten; Jedes Multithreading-Lehrbuch wird Ihnen zeigen, wie es geht.
Ich denke Streams sind nicht kopierbar. Die Idee, dasselbe Stream-Objekt zu übergeben, ist nicht durchführbar. – Steephen
Ich weiß nicht, ob range-v3 mit solchen Funktionen ausgestattet ist, aber ich kann mir vorstellen, dass es nicht zu schade wäre, eine sinnvolle Bereichsfunktion für einen 'InputRange' zu schreiben. Wenn nichts anderes, looping den Eingang träge und eine Reihe von Ausgabekopien ([1,2,3] -> [[1,2,3], [1,2,3], [1,2,3] ]), mit der durch einen Parameter bestimmten Anzahl. Leider ist eine solche einfache Lösung möglicherweise nicht gut für das Suchen. – chris
Wenn Sie von mehreren Orten auf demselben 'std :: istream 'suchen, werden die anderen Suchvorgänge überschrieben. Wenn es sich um eine Datei handelt, könnten Sie möglicherweise mehrere 'std :: ifstream's für dieselbe Datei öffnen und nach verschiedenen Orten suchen; Das Betriebssystem kann den Zugriff für Sie optimieren. – vu1p3n0x