gpt4 book ai didi

C++ 流对象线程安全吗?

转载 作者:行者123 更新时间:2023-11-30 01:17:57 26 4
gpt4 key购买 nike

我需要在具有多线程的 C++ 应用程序中的文件夹中的文件中提供文本搜索。如果两个线程试图以只读模式打开同一个文件,是否会导致数据竞争或多个线程可以使用流对象读取文件?

  std::ifstream ifs ("test.txt");
std::filebuf* inbuf = ifs.rdbuf();

文件夹中的文件也是动态的(有人可以在应用程序运行时将文件放入文件夹中)所以如果需要锁定,我应该将其保留在文件夹级别还是动态需要每个文件锁定?

最佳答案

多个线程可以打开同一个文件,并读取它。这没问题,但线程不得共享 std::ifstream 实例。因此,您的代码可以由多个线程执行。

如果文件是动态的,我猜你的应用程序“消费”了这些文件,不是吗?如果是这种情况,您必须同步线程:一个线程必须列出目录中的文件,并将文件分配给读取文件的其他线程。如果所有线程都读取文件而它们之间没有通信,它们将读取/使用同一个文件多次。

对于锁,我不知道:这取决于你在做什么......删除文件?写入这些文件?重命名它们?如果你需要一些性能,每个文件一个锁会更好。

关于C++ 流对象线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23317690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com