使用MSVC同时和异步写入文件?

时间:2012-03-22 01:14:55

标签: c++ windows visual-c++ file-io

目前我正在使用单个线程和fseek / fwrite将数据保存到循环中的大文件中。但当然节约是瓶颈。为了消除这个瓶颈,我想我可以创建一个异步文件写入的线程,但这将阻止下一个迭代线程中的文件访问。

有没有办法在Visual C / C ++中同时和异步写入文件?

(操作系统是Windows)

3 个答案:

答案 0 :(得分:2)

使用功能:

CreateFileMapping

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v=vs.85).aspx

将内存映射到内存,然后您可以让多个线程同时写入内存。

有关内存映射文件的更多信息:

http://en.wikipedia.org/wiki/Memory-mapped_file

答案 1 :(得分:1)

异步IO功能(例如WriteFileEx)允许并发访问。但我不清楚你认为这会如何提高你的吞吐量。

答案 2 :(得分:1)

使用CreateFile(),SetFilePointer()和SetEndOfFile()来创建和预先调整文件大小。然后在工作线程中使用CreateFile()打开文件的附加句柄,SetFilePointer()寻找所需的偏移量,WriteFile()写入它。只要每次调用CreateFile()都授予FILE_SHARE_WRITE权限,您就可以一次打开具有GENERIC_WRITE权限的多个句柄。每个句柄都在文件中维护自己的指针。