为作家寻找最佳的文件锁定机制 - 读者

时间:2016-03-30 05:54:21

标签: c++ boost file-locking

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

\201603\30
           file_1
           file_2
\201603\31
           file_3
           file_4
           file_5

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

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

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

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

2 个答案:

答案 0 :(得分:1)

由于所有锁定用户都在您的程序中,您需要进行进程间锁定? file_lock将互斥锁放入一个文件,让内核管理锁定/解锁。这仅在多个进程需要遵守锁定时才有用。

听起来你只需要一个普通的读写锁,Boost会调用shared_lock。有关如何使用其中一个示例,请参阅此答案:https://stackoverflow.com/a/989816/321772

总之,共享锁允许多个线程获取锁以进行读取,但只允许一个线程将锁升级到编写器(排除所有其他读者/编写者)。

答案 1 :(得分:0)

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

如果您需要在多个进程中有效锁定,现在是2017年或更晚,您可以考虑在建议的Boost.AFIO v2的后对等审核重写中使用其中一个shared_fs_mutex算法:{{3 }}。我告诫2017年的原因是AFIO v2甚至没有测试套件,它是高度alpha代码,我不能推荐任何人使用它。