请考虑这张照片:
Boundary
|
v
+-------------------------+---+
| (Read only region) |>>>| (Appending)
+-------------------------+---+
^ ^ ^ ^
| | | |
Multiple readers Single writer
同时访问同一个文件,我们有几个读者和 只有一个作家。作者总是写在文件的末尾 - 它永远不会重写以前写过的字节。和 读者可以阅读文件的随机位置,但他们从不 超越边界。当写入新字节时, 作家增加了边界。理论上我认为,如果我们有这些 约束我们可以读取和写入相同的文件 时间。这对许多情况都有好处。
我的问题是如何以简单的方式实现它 - 我不确定 文件系统可以保证什么。
一个想法是将文件分解为小缓冲区,然后使用 一些无锁算法。但操作系统已经有了 这些缓冲区 - 从进程缓存到磁盘缓存,并且非常适合 在分页内存系统中。添加一个新的缓存层将带来 更多的内存复制时间。它有点复杂。
考虑到语言,没有锁定,我们无法访问C ++ 来自多线程安全的文件流对象。但是,如果我们使用 锁,它是同步访问,而不是并发访问。 此外,我认为读写锁定不起作用。而 几个读者共享锁,文件光标等 流对象的内部变量将具有数据竞争 问题,因为这些变量会在您阅读时被更改 文件,它实际上是一个写操作。
你怎么看?是否有一些C ++库已经这样做了?