作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在具有多线程的 C++ 应用程序中的文件夹中的文件中提供文本搜索。如果两个线程试图以只读模式打开同一个文件,是否会导致数据竞争或多个线程可以使用流对象读取文件?
std::ifstream ifs ("test.txt");
std::filebuf* inbuf = ifs.rdbuf();
文件夹中的文件也是动态的(有人可以在应用程序运行时将文件放入文件夹中)所以如果需要锁定,我应该将其保留在文件夹级别还是动态需要每个文件锁定?
最佳答案
多个线程可以打开同一个文件,并读取它。这没问题,但线程不得共享 std::ifstream 实例。因此,您的代码可以由多个线程执行。
如果文件是动态的,我猜你的应用程序“消费”了这些文件,不是吗?如果是这种情况,您必须同步线程:一个线程必须列出目录中的文件,并将文件分配给读取文件的其他线程。如果所有线程都读取文件而它们之间没有通信,它们将读取/使用同一个文件多次。
对于锁,我不知道:这取决于你在做什么......删除文件?写入这些文件?重命名它们?如果你需要一些性能,每个文件一个锁会更好。
关于C++ 流对象线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23317690/
我是一名优秀的程序员,十分优秀!