【问题标题】:C memory mapped file vs regular fileC 内存映射文件与常规文件
【发布时间】:2015-04-30 19:00:39
【问题描述】:

我正在研究一个实现,其中多个进程读取一个常规文件A。当这发生时,一个新进程P 启动并将内容从A 复制到常规文件B。在此之后启动的所有进程现在应该读取文件B
要从A 切换到B,进程P 在写入B 后创建一个临时文件T。所有进程检查T是否存在以决定从哪里读取数据(即,如果T不存在,则从A读取,如果T存在,则从B读取)。
由于T文件在这里只是一个指标,那么使用内存映射文件而不是常规文件是否更好以获得更快的性能?

【问题讨论】:

  • 你的操作系统和文件系统是什么?
  • 操作系统为QNX,常规文件在闪存盘上创建。

标签: c memory-mapped-files


【解决方案1】:

使用 tmp 文件进行同步并不安全。检查文件是否存在并且读取该文件不是原子的。一个进程可以在另一个进程完成检查并即将读取之后切换文件。

如果您使用 C 开发并允许使用 IPC API,您可以在共享内存中设置标志并通过信号量保护它。 此外,进程应该发出信号,表明它们已完成读取。

【讨论】:

  • 在这种情况下,只有唯一进程P 将数据从A 复制到B。其他人只是读者。我不太担心这里的安全性,因为A 在复制后会继续存在一段时间。问题是与常规文件(只有一个字节长)相比,使用共享内存标志是否会显着提高性能。我在某处读到共享内存在使用小文件时并没有带来很多改进。
猜你喜欢
  • 2016-12-08
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 2016-02-23
相关资源
最近更新 更多