为作者-读者寻找最好的提升文件锁定机制

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

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

1603
           file_1
           file_2
1603
           file_3
           file_4
           file_5

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

锁定将应用于目录而不是单个文件(例如 1603 或 1603)。

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

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

既然所有的锁用户都在你的程序里,你还需要进程间锁干什么? file_lock 将互斥体放入一个让内核管理的文件中 locking/unlocking。这仅在多个进程需要尊重锁时才有用。

听起来你只需要一个常规的读写锁,Boost 调用它 shared_lock. See this answer for an example on how to use one:

综上所述,共享锁允许多个线程获取读锁,但只允许一个线程将锁升级为写锁(不包括所有其他readers/writers)。

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

如果您需要跨多个进程有效锁定,现在是 2017 年或更晚,您可以考虑使用 post-peer-review 重写中的 shared_fs_mutex 算法之一提议的 Boost.AFIO v2:https://ned14.github.io/boost.afio/namespaceboost_1_1afio_1_1v2_1_1algorithm_1_1shared__fs__mutex.html。我要注意的是 2017 年的原因是 AFIO v2 甚至还没有测试套件,它是高度 alpha 代码,我还不能推荐任何人使用它。