2

提升文件锁定(可共享和作用域的file_locks)的一般策略,以及我认为的一般文件锁定,是这样的:

  1. 打开
  2. 对文件内容进行操作
  3. 开锁
  4. 关闭文件

但是,我将打开文件进行追加,并想调用 tellp 来查看我在哪里。在上述情况下这样做安全吗?在锁定之前打开文件后是否会立即设置文件指针,因此可能不受保护?如果是这样,是否有一个标准的成语来解决这个问题?

4

2 回答 2

1

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

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

于 2011-01-13T02:58:21.640 回答
0

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

您可以在其中阅读:

  • 文件锁不是操作系统锁,即使操作系统支持它(例如 Windows 支持,Unix-like 通常不支持),所以如果你锁定文件,任何人都可以读/写/删除它,除非其他进程使用相同的文件锁定机制。因此认为它更像是进程间互斥锁而不是真正的文件锁。
  • 文件锁用于进程间同步,它们不同步进程内的多个线程
  • 不要忘记flush(ofstream的flush),这样就不用担心缓冲了

哦,这太糟糕了......我想帮忙,我已经编写了示例代码,尝试一下......从 1_44 开始,win32 的文件锁定被破坏,刷新对锁定的文件不起作用。

对不起,不是我的错。

如果有帮助,理论上:如果您打开文件进行追加,则意味着在每次写入操作之前自动搜索结束。它不会阻止您随时手动寻求结束 - 即使没有写作。然而,经验(见上文)说:远离破碎的东西。

于 2011-01-13T07:51:56.057 回答