boost进程间file_lock实际上对目标文件做了什么?

时间:2015-02-07 12:57:33

标签: c++ boost boost-interprocess

我已经完成了关于boost::interprocess::file_lock的一些阅读,它似乎完成了我之后的事情(支持可共享和独占锁定,并且如果进程崩溃或退出则解锁)。 / p>

我不确定的一件事是到文件中的是什么?我可以使用例如0字节长的文件吗? boost::interprocess是否写了任何内容?或者它是否存在于所有系统关心的位置?

我现在已经使用boost::interprocess一段时间来可靠地记忆映射文件并写入文件,现在我需要进行多进程并确保对此文件的读写操作受到保护; file_lock看起来似乎要走了,我只是想知道我现在是否需要添加另一个文件来用作互斥锁。

提前致谢

1 个答案:

答案 0 :(得分:4)

  

对文件做了什么?

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

您需要查看相关的操作系统文档页面,了解在您执行某些不寻常操作时可能发生的情况以及预期的工作方式。对于Linux和OSX,您需要查看mmap手册页。对于Windows,请查看CreatefileMapping

  

file_lock看起来似乎要走了

是的,您几乎总是需要仲裁对内存映射文件的访问权限,例如,一个进程只会在另一个进程完成写入时尝试读取数据。最合适的同步原语是一个file_lock(操作系统已经锁定了文件),它是一个命名的互斥锁。比方说,使用提升named_mutex class

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