Boost文件锁定的一般策略(可共享和范围file_locks)和我认为的文件锁定是:

  1. 打开
  2. 在文件内容上操作
  3. 开锁
  4. 关闭文件

但是,我将打开附录文件,并想致电Tellp以查看我的位置。在上述情况下,这是安全的吗?在锁定之前打开文件并因此不受保护的情况下,不会立即设置文件指针?如果是这样,是否有标准的成语可以解决这个问题?

有帮助吗?

解决方案

这可能是特定于环境的,但在大多数平台上:

打开文件以进行附加时,在每次写之前,立即调整文件指针。所以,如果您使用 tellp 在锁定文件之前,可能不会告诉您新附加的字节将要去哪里,但是您不应使用锁定的两个进程,以某种方式仍然附加相同的字节范围。

其他提示

我推荐好的提升文档:http://www.boost.org/doc/libs/1_45_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization.synchronization_mechanization_mechanisms.file_lock

您可以阅读:

  • 即使操作系统支持它,文件锁也不是操作系统锁(例如Windows是,通常类似于Unix,通常不使用),因此,如果您锁定文件,除非其他过程使用相同的文件锁定机制,否则任何人都可以读取/写入/删除它。因此,想想它更像是介绍静音的,而不是真实的文件锁。
  • 文件锁用于解释同步,它们不会在进程中同步多个线程
  • 不要忘记(ofstream的潮红),所以您不必担心缓冲

哦,这真是太糟糕了...我想提供帮助,我已经写了示例代码,尝试了一下,然后...从1_44起,win32损坏了文件锁定,潮红不起作用。

抱歉,不是我的错。

如果有帮助,从理论上讲:如果您打开文件以进行附加文件,则意味着自动寻求在每个写操作之前结束。它不会阻止您手动寻求在您想要的任何时候结束 - 即使没有写作。但是,经验(见上文)说:远离破碎的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top