我有多个线程,我希望他们每个人都能处理我的文件的一部分。我可以有一个ifstream对象,并让它们同时读取不同的部分?这些部分不重叠,所以同一行不会被两个线程处理。如果是,如何获得多个游标?你可以为同一个ifstream有多个“游标”吗?这是线程安全的吗?
4
A
回答
0
单个std::ifstream
只与一个游标相关联(直接与std::ifstream
关联的seekg
和tellg
方法)。
如果你想要在多个线程中共享同一个对象std::ifstream
,你必须在线程之间建立某种同步机制,这可能会失去目的(在每个线程中,你必须锁定,每次寻找,读取和解锁)。
要解决您的问题,您可以打开一个std::ifstream
到每个线程相同的文件。在每一个线程中,你都会寻找你想要开始阅读的任何位置。这只会要求你能够“容易地”计算每个线程的查找位置(注意:这是一个非常强大的要求)。
0
C++文件流不保证是线程安全的(请参阅,例如this answer)。
典型的解决方案是无论如何在同一个文件上打开单独的流,每个实例都带有自己的“光标”。但是,您需要确保共享访问,并发性将成为特定平台。
对于ifstream
(即只从文件读取),并发问题通常是驯服的。即使别人修改了文件,这两个流可能会看到不同的内容,但是你确实有一些最终的一致性。
读取和写入通常是而不是原子,即您可能只读取部分写入。写入甚至可能不会按照它们发出的顺序执行(请参阅write combining)。
0
看着FILE struct它似乎有一个指针指向当前活动指针FILE,char* curp
,这可能意味着对于每个FILE对象,你将有一个文件的特定部分。
这是在C中,我不知道ifstream是如何工作的,如果它使用FILE对象/它是像FILE对象一样构建的。可能根本没有帮助你,但我认为分享这些小信息会很有趣,并且可能会帮助某人。
相关问题
- 1. 写这个是线程安全的吗?
- 2. 这个servlet是线程安全的吗?
- 3. 这是多线程迭代安全吗?
- 4. 这个Singleton是一个线程安全的吗?
- 5. 多个用户可以同时提交给SVN吗?线程安全吗?
- 6. 这个java类线程安全吗?
- 7. 这个html helper线程安全吗?
- 8. 这个游标可以被替换吗
- 9. 同一对象(C++)的多个副本:线程安全吗?
- 10. 多个游标 - 可能吗?
- 11. 这些类是线程安全的吗?
- 12. 这些线程安全吗?
- 13. 这是一个安全的连接吗?
- 14. MySQLdb连接和游标对象可以安全地使用多线程吗?
- 15. 这是使用Parallel.ForEach()线程安全吗?
- 16. 你可以为同一个x坐标绘制多个y点吗?
- 17. 你可以有多个库吗?
- 18. 你可以有多个domready事件吗?
- 19. 你可以执行一行作为python线程的目标吗?
- 20. 这可能被认为是一个安全漏洞吗?
- 21. 这是一个有效的,懒惰的,线程安全的Singleton实现C#吗?
- 22. python函数是线程安全吗? (特别是这个?)
- 23. 使用这个问题我可以有线程安全问题吗?
- 24. 证明这个类是线程安全的吗?
- 25. 这个python代码是线程安全的吗?
- 26. 一个线程可以同时持有两个锁吗?
- 27. 这个同步对象实现线程安全吗?
- 28. 你可以在同一个类中有一个textSwitcher和imageSwitcher吗?
- 29. 是否可以同时从多个线程调用write()安全?
- 30. 是jBPM executionservice多线程安全吗?