代码之家  ›  专栏  ›  技术社区  ›  Dave F

boost interprocess file_lock实际上对目标文件做了什么?

  •  6
  • Dave F  · 技术社区  · 11 年前

    我读了一些关于 boost::interprocess::file_lock 而且它似乎做了我想要的很多事情(支持共享和独占锁定,并且在进程崩溃或退出时解锁)。

    但有一件事我不确定,那就是它是什么 到文件?例如,我可以使用0字节长的文件吗?做 boost::interprocess 在里面写什么?或者它的存在是整个系统所关心的吗?

    我一直在使用 增强::进程间 现在需要一段时间来可靠地对文件进行内存映射和写入,现在我需要进行多进程处理,确保对该文件的读写受到保护; file_lock 我想知道现在是否需要添加另一个文件来用作互斥锁。

    提前感谢

    1 回复  |  直到 11 年前
        1
  •  6
  •   Hans Passant    9 年前

    这是什么 到文件?

    Boost不处理文件,它依赖于操作系统来完成任务。对内存映射文件的支持是按需分页虚拟内存操作系统的通用功能。像Windows、Linux、OSX。内存通常由分页文件支持,由您选择的特定文件支持只是一小步。Boost只提供了一个独立于平台的适配器,仅此而已。

    您需要查看相关的操作系统文档页面,以了解当您做一些不寻常的事情时,可能会发生什么,以及预期会如何工作。对于Linux和OSX,您需要查看 mmap 手册页。对于Windows,请查看 CreatefileMapping .

    file_lock似乎是正确的方法

    是的,您几乎总是需要仲裁对内存映射文件的访问,因此例如,一个进程只会在另一个进程完成写入时尝试读取数据 file_lock(OS已经锁定了文件),它是一个命名的互斥体。比如说,使用boost named_mutex class .

    请记住,这是一个 非常 低级互操作机制,并且没有任何便利。当您添加所有所需的同步时,您已经完成了OS使用命名管道或本地环回套接字所做的一半。如果您发现必须将数据复制到映射视图中,这并不罕见,因为它不容易调整大小,那么您就失去了所有的好处。