目前我正在使用单个线程和fseek / fwrite将数据保存到循环中的大文件中。但当然节约是瓶颈。为了消除这个瓶颈,我想我可以创建一个异步文件写入的线程,但这将阻止下一个迭代线程中的文件访问。
有没有办法在Visual C / C ++中同时和异步写入文件?
(操作系统是Windows)
答案 0 :(得分:2)
使用功能:
CreateFileMapping
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v=vs.85).aspx
将内存映射到内存,然后您可以让多个线程同时写入内存。
有关内存映射文件的更多信息:
答案 1 :(得分:1)
异步IO功能(例如WriteFileEx)允许并发访问。但我不清楚你认为这会如何提高你的吞吐量。
答案 2 :(得分:1)
使用CreateFile(),SetFilePointer()和SetEndOfFile()来创建和预先调整文件大小。然后在工作线程中使用CreateFile()打开文件的附加句柄,SetFilePointer()寻找所需的偏移量,WriteFile()写入它。只要每次调用CreateFile()都授予FILE_SHARE_WRITE权限,您就可以一次打开具有GENERIC_WRITE权限的多个句柄。每个句柄都在文件中维护自己的指针。