2017-05-05 18 views

回答

0

单个std::ifstream只与一个游标相关联(直接与std::ifstream关联的seekgtellg方法)。

如果你想要在多个线程中共享同一个对象std::ifstream,你必须在线程之间建立某种同步机制,这可能会失去目的(在每个线程中,你必须锁定,每次寻找,读取和解锁)。

要解决您的问题,您可以打开一个std::ifstream到每个线程相同的文件。在每一个线程中,你都会寻找你想要开始阅读的任何位置。这只会要求你能够“容易地”计算每个线程的查找位置(注意:这是一个非常强大的要求)。

0

C++文件流不保证是线程安全的(请参阅,例如this answer)。

典型的解决方案是无论如何在同一个文件上打开单独的流,每个实例都带有自己的“光标”。但是,您需要确保共享访问,并发性将成为特定平台。

对于ifstream(即只从文件读取),并发问题通常是驯服的。即使别人修改了文件,这两个流可能会看到不同的内容,但是你确实有一些最终的一致性。

读取和写入通常是而不是原子,即您可能只读取部分写入。写入甚至可能不会按照它们发出的顺序执行(请参阅write combining)。

0

看着FILE struct它似乎有一个指针指向当前活动指针FILE,char* curp,这可能意味着对于每个FILE对象,你将有一个文件的特定部分。
这是在C中,我不知道ifstream是如何工作的,如果它使用FILE对象/它是像FILE对象一样构建的。可能根本没有帮助你,但我认为分享这些小信息会很有趣,并且可能会帮助某人。

相关问题