正在为编写者和读者寻找最佳的增强文件锁定机制
Looking for the best boost file lock mechanism for writers - readers
我有位于不同目录中的文件,如下所示:
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代码,我还不能建议任何人使用它。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 复制部分文件的C++/增强方式
- 增强共享内存:文件的卷已被外部更改,打开文件不再有效
- 如何在C++增强 ublas 中将文件流式传输到矩阵中
- 增强Visual Studio中的.ipp文件支持
- 正在为编写者和读者寻找最佳的增强文件锁定机制
- 将巨大的增强dynamic_bitset矢量写入文件并将其读回的有效方法
- 将C *文件转换为C++ iostream与增强
- 通过从文件读取来增强正则表达式匹配
- 通过轮换增强 2 个文件中的日志记录
- c++增强序列化如何防止不正确的文件崩溃
- 头文件在增强构建中丢失
- 在可执行文件或.o文件上增强SCA构建
- 通过增强 tcp 进行文件传输