我的文件位于不同的目录中,如下所示:
\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
以外,您有什么建议吗?
答案 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代码,我不能推荐任何人使用它。