c++ - boost interprocess file_lock不适用于多个进程

标签 c++ boost file-io locking interprocess

我似乎遇到了 boost::interprocess::file_lock 的问题

我的流程 1 本质上是

    boost::interprocess::file_lock test_lock("testfile.csv");
    test_lock.lock();
    sleep(1000);
    test_lock.unlock();

当我在第一个进程休眠时运行第二个进程时,我发现我仍然能够读取 testfile.csv。更糟糕的是,我什至可以覆盖它。

我是否误解了 file_lock 的工作原理?我的印象是调用 .lock() 会为其提供对文件的独占锁定并防止任何其他进程读取/修改文件。

最佳答案

file_lock 不用于锁定文件。它是一个使用文件作为支持技术的互斥对象。文件的内容基本上是无关紧要的;相关的是指向该文件的 file_lock 的所有实例都将遵守锁的锁定特性。

与任何互斥类型对象一样,锁本身用于保护或以其他方式计量对某些其他资源的访问。

它与文件的文件系统保护无关

Reference

关于c++ - boost interprocess file_lock不适用于多个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697704/

相关文章:

c++ - 在 Boost.ProgramOptions 中使用类似 gettext 的翻译

Windows cmd提示移动文件

java - 写入文件,然后使用 WindowListener 保存它

python - or-tools:简单的问题在 cpp 中不可行,但在 python 中有效

c++ - 解析 JSON 响应?

c++ - C++ 我可以在这里使用数组来缩短我的代码吗?

Linux 环境中 MS Windows 的 C++11 编译器

c++ - Boost Log 清除日志文件

file-io - 编写 netcdf4 文件比编写 netcdf3_classic 文件慢 6 倍,而文件大 8 倍?

c++ - 在 C++ 中部分截断流(fstream 或 ofstream)