【问题标题】:Can I have a memory mapped file, mapped to two or more processes at the same time (windows)?我可以有一个内存映射文件,同时映射到两个或多个进程(Windows)吗?
【发布时间】:2012-03-12 23:30:30
【问题描述】:

我需要让两个进程通过内存映射文件共享信息。其中一个只读取文件,另一个只写入文件。 我可以让文件始终映射到这两个进程吗?我目前是:

  1. 将文件映射到阅读器进程
  2. 写作
  3. 取消映射文件
  4. 将文件映射到写入进程
  5. 阅读
  6. 取消映射

每次我需要共享信息的过程时,都会一遍又一遍地重复。我担心的是,所有这些对 map 和 unmap 的调用可能都很昂贵。我应该始终将文件映射到两个进程吗?我可以通过互斥锁来控制对共享内存的访问。

完成此类任务的最佳方法是什么?

【问题讨论】:

    标签: windows ipc memory-mapped-files


    【解决方案1】:

    您根本不需要在读取或写入后取消映射文件。当本地文件映射到一台计算机上时,Windows 保证两个进程中映射中“可见”的数据是相同的。

    【讨论】:

    • 嗯,它和线程之间共享的进程私有数据一样同步,也就是说你需要内存屏障和同步(锁或互锁操作)。
    【解决方案2】:

    如果您需要重复执行此操作,请维护映射。不要prematurely optimize。 (如果你确实发现有问题,你可以回到那个时候修复它们。)

    【讨论】:

    • 谢谢!中肯的建议。我需要每秒执行数十次...这就是为什么我认为它会很糟糕。但你是对的,我现在不应该看优化。
    • 不取消映射文件不会有任何问题 - MMF 是专门为这种使用场景设计的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    相关资源
    最近更新 更多