避免在NFS共享文本文件上同时写入

时间:2012-07-06 20:03:24

标签: c++ locking nfs inotify stat

我正在用C ++编写一个模块,该模块将在一组机器上运行,所有这些机器都有一个nfs挂载的文件存储。

我通过NFS与所有机器共享配置文件;并且所有人都可以读/写该文件。如何确保同时访问不会导致数据损坏?

我知道NFS有自己的锁定协议,但我认为它不可靠 - concurrent nfs access。我还看到iNotify在nfs挂载的驱动器上表现不佳 - inotifiy example。我不确定stat在写/读之前检查文件是否被访问是有用的。

如何在c ++中实现简单的锁定机制以避免同时访问?

1 个答案:

答案 0 :(得分:0)

当您将内容A,B和C同时写入通过NFS共享的文件时,最终内容将是ABC或任何此类可能的ABC组合,如BAC,CAB等。文件将始终保持一致,它永远不会写A部分,然后是B.因此写一个接一个地发生。请注意,仅当内容大小落在NFS块大小内时才会出现这种情况。

如果您的写入超过块大小,则需要使用NLM,这需要在NFS服务器和客户端上运行锁定守护程序。