同时读写同一文件

时间:2015-11-26 08:36:18

标签: c++ file-io concurrency

请考虑这张照片:

                       Boundary
                          |
                          v
+-------------------------+---+
|   (Read only region)    |>>>| (Appending)
+-------------------------+---+
       ^    ^    ^            ^
       |    |    |            |
     Multiple readers   Single writer

同时访问同一个文件,我们有几个读者和 只有一个作家。作者总是写在文件的末尾 - 它永远不会重写以前写过的字节。和 读者可以阅读文件的随机位置,但他们从不 超越边界。当写入新字节时, 作家增加了边界。理论上我认为,如果我们有这些 约束我们可以读取和写入相同的文件 时间。这对许多情况都有好处。

我的问题是如何以简单的方式实现它 - 我不确定 文件系统可以保证什么。

一个想法是将文件分解为小缓冲区,然后使用 一些无锁算法。但操作系统已经有了 这些缓冲区 - 从进程缓存到磁盘缓存,并且非常适合 在分页内存系统中。添加一个新的缓存层将带来 更多的内存复制时间。它有点复杂。

考虑到语言,没有锁定,我们无法访问C ++ 来自多线程安全的文件流对象。但是,如果我们使用 锁,它是同步访问,而不是并发访问。 此外,我认为读写锁定不起作用。而 几个读者共享锁,文件光标等 流对象的内部变量将具有数据竞争 问题,因为这些变量会在您阅读时被更改 文件,它实际上是一个写操作。

你怎么看?是否有一些C ++库已经这样做了?

0 个答案:

没有答案
相关问题