正在为编写者和读者寻找最佳的增强文件锁定机制

Looking for the best boost file lock mechanism for writers - readers

本文关键字:增强 文件 文件锁 机制 锁定 最佳 寻找 编写者      更新时间:2023-10-16

我有位于不同目录中的文件,如下所示:

20160330
           file_1
           file_2
20160331
           file_3
           file_4
           file_5

有2位作家&2个读者,他们都是我程序中的线程。

锁定将应用于目录,而不是单个文件(例如\201603/30或\201603/31)。

我想使用boost库使我的程序可移植。

我已经搜索并被介绍给boost::interprocess::file_lock。我只是想知道,我真的需要一个"进程间"锁吗?这个锁可以在读者之间共享吗?除了boost::interprocess::file_lock,你还有其他建议吗?

由于中的所有锁定用户都在程序中,您需要进程间锁定做什么?file_lock将互斥锁放入一个文件中,该文件允许内核管理锁定/解锁。只有当多个进程需要尊重锁时,这才有用。

听起来你只需要一个普通的读写锁,Boost称之为shared_lock。有关如何使用的示例,请参见以下答案:https://stackoverflow.com/a/989816/321772

总之,共享锁允许多个线程获取用于读取的锁,但只允许一个线程将锁升级到写入程序(不包括所有其他读写器)。

正如另一个响应程序所提到的,因为只有一个进程在使用文件系统上不需要锁定的文件,所以std::shared_mutex甚至是一个普通的旧std::mutex应该足够了。

然而,如果您需要在多个进程之间高效锁定,并且现在是2017年或更晚,您可能会考虑在拟议的Boost.AFIO v2的同行评审后重写中使用shared_fs_mutex算法之一:https://ned14.github.io/boost.afio/namespaceboost_1_1afio_1_1v2_1_1algorithm_1_1shared__fs__mutex.html.我警告2017年的原因是AFIO v2甚至还没有测试套件,它是高度alpha代码,我还不能建议任何人使用它。