C+中的多线程应用+; 我正在研究一个用C++编程的多线程应用程序。我使用一些临时文件在线程之间传递数据。一个线程将要处理的数据写入目录中的文件。另一个线程扫描目录中的工作文件,读取文件并进一步处理,然后删除这些文件。我必须使用这些文件,因为如果我的应用程序在运行时被终止,我必须保留尚未处理的数据
但我讨厌使用多个文件。我只想使用一个文件。一个线程持续向文件写入数据,另一个线程读取数据并删除已读取的数据。C+中的多线程应用+; 我正在研究一个用C++编程的多线程应用程序。我使用一些临时文件在线程之间传递数据。一个线程将要处理的数据写入目录中的文件。另一个线程扫描目录中的工作文件,读取文件并进一步处理,然后删除这些文件。我必须使用这些文件,因为如果我的应用程序在运行时被终止,我必须保留尚未处理的数据,c++,multithreading,file-io,C++,Multithreading,File Io,但我讨厌使用多个文件。我只想使用一个文件。一个线程持续向文件写入数据,另一个线程读取数据并删除已读取的数据。 就像一个容器从顶部和底部填充一样,我可以从容器中获取和删除数据。如何在C++中高效地进行这一操作,首先有一种方法吗?p> win32Api函数CreateFileMapping()允许进程共享数据,多个进程可以使用系统分页文件存储的内存映射文件 一些好的链接: 正如在对您的问题的评论中所建议的那样,使用类似SQLite的数据库可能是一个非常好的解决方案。 但是,如果您坚持使用文件
就像一个容器从顶部和底部填充一样,我可以从容器中获取和删除数据。如何在C++中高效地进行这一操作,首先有一种方法吗?p> win32Api函数
CreateFileMapping()
允许进程共享数据,多个进程可以使用系统分页文件存储的内存映射文件
一些好的链接:
正如在对您的问题的评论中所建议的那样,使用类似SQLite的数据库可能是一个非常好的解决方案。 但是,如果您坚持使用文件,那么这当然是可能的 我自己做过一次——用一个文件在磁盘上创建了一个持久队列 以下是如何实现这一目标的指南:
希望这将您设置在写入轨道上您可以写入每行处理的数据,每行的delimeter指示是否进行此记录处理您需要使用文件吗?为什么不使用内存来保护互斥体呢?另一种方法可能是使用数据库(SQLite、SQL Server CE等)。我警告您,如果您的应用程序被杀死,并且您使用的是缓冲IO,那么您需要担心的事情比您最初想象的要多。我不能使用内存,我不能在我的应用程序被杀死时丢失数据,因为数据将被淹没,将其写入数据库是一个好主意吗?数据库可能比从多个线程访问的文件更适合,而且还有事务的概念。事务确保ACID(原子的、一致的、隔离的、持久的)-我想这就是您要寻找的。抱歉,我忘了提到我的应用程序也需要在Linux上工作。unix系统中有一个类似的API:请参阅。