【发布时间】:2012-07-06 20:03:24
【问题描述】:
我正在用 C++ 编写一个模块,它将在一组机器上运行,所有这些机器都有一个 nfs 挂载的文件存储。
我有一个通过 NFS 与所有机器共享的配置文件;并且所有人都可以读/写该文件。如何确保不会因同时访问而导致数据损坏?
我知道 NFS 有自己的锁定协议,但我认为它不可靠 -concurrent nfs access。我还看到 iNotify 在安装了 nfs 的驱动器上表现不佳 - inotifiy example。我不确定stat 是否有助于在写入/读取之前检查文件是否正在被访问。
如何在c++中实现一个简单的锁定机制来避免同时访问?
【问题讨论】:
-
...通过不尝试同时写入同一个文件。写入文件的唯一副本并使用重命名在旧文件上进行透视。
-
...换句话说,如果文件是本地文件,您可能应该做的事情完全相同。
-
这对我来说不是一个选项,因为 IPC(unix 域套接字)正在跟踪文件(及其 fd)以进行更改。更改将传输回模块进行进一步处理。
-
在这种情况下,您最好的选择可能是停止使用 NFS,并获得一个支持集群范围文件锁定的集群感知文件系统,该系统以比非为此设计的方式更可靠的方式支持使用 NFS 锁定(如上所述,除了不打算处理这种事情之外,它可能是不可靠的)。
-
这又不是我的选择 - 我正在专门寻找可以帮助我设计锁定机制的建议
标签: c++ locking nfs inotify stat