我正在用C编写一个组件,它将被几个不同进程使用,所有进程都访问同一个文件。
每个进程将同时访问文件的不同部分,主要用于阅读和写作。
我试图找出正确的方法:
意见A: 对于为整个文件调用一次CreateFileMapping的每个进程,然后在不同的部分多次使用MapViewOfFile来访问它需要的部分,这意味着如果我有10个部分我想访问,我将为整个文件调用CreateFileMapping一次,端到端,然后MapViewOfFile 10次,一次为文件的每个部分。
OR
选项B: 对于每个进程调用CreateFileMapping& MapViewOfFile在它希望访问的每个特定部分上,这意味着如果我有10个部分我想访问,我将调用CreateFileMapping& MapViewOfFile每次10次。
谢谢!
答案 0 :(得分:4)
您必须至少每个进程调用一次CreateFileMapping
和MapViewOfFile
才能访问数据。但是,您不需要再调用它们一次。当然,如果映射本身很大,您可能需要取消映射并重新映射以保存虚拟地址空间,但如果数据量不是那么大,则可以跳过此步骤。
映射文件映射后,您的进程会直接查看数据。读取和写入操作立即发生,为了序列化访问并防止线程竞争条件,您需要使用Interprocess Communication,例如信号量。
您可能想要阅读并研究示例代码的内容:Shared Memory。另请尝试使用Google搜索MapViewOfFile
+ WaitForMultipleObjects
以获取更多信息。