当两个进程写入mmaped文件的相同部分时会发生什么?

用户972946

我正在编写一个使用mmap系统调用的C程序,该程序在64位Linux 3.12上运行。

如果我有两个进程使用读/写访问权限映射磁盘文件的同一区域,然后同时修改两个进程的区域内容...

  • 在msync之前或之后,一个进程可以查看(读取)另一进程生成的更改的数据吗?
  • 如果其他进程可以看到更新-Linux mmap实现是否可以保证之前发生了什么?
大雾天

是的,这就是内存映射的目的之一:作为“即时IPC”的一种形式。

您必须设置MAP_SHARED标志:

如果您希望为此目的使用共享内存,则可以考虑使用shminit()/ shmat()API:

建议:查看Beej的* nix进程间通信指南:

不,如果您使用原始的mmap()API,则没有“之前/之后保证”,并且如果您希望同时读取/写入数据,则必须使用某种锁定方式(例如信号量)。

另外,从了解内存映射

mmap和shmat服务都为多个进程提供了映射对象同一区域的功能,以便它们共享对该对象的可寻址性。但是,mmap子例程通过允许建立相对无限数量的此类映射,将这种功能扩展到shmat子例程所提供的功能之外。尽管此功能增加了每个文件对象或内存段支持的映射数量,但对于许多进程将同一文件数据映射到其地址空间的应用程序来说,效率可能低下。

mmap子例程为每个映射到对象的进程提供唯一的对象地址。该软件通过为每个进程提供唯一的虚拟地址(称为别名)来实现此目的。shmat子例程允许进程共享映射对象的地址。

以上适用于所有* nix变体,包括Linux和AIX。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当多个进程尝试在两个不同文件系统之间转换相同文件时会发生什么?

来自分类Dev

当两个脚本想同时使用LOCK_EX写入文件时会发生什么?

来自分类Dev

当两个进程同时调用register()时会发生什么

来自分类Dev

当两个线程同时调用相同的静态方法时会发生什么?

来自分类Dev

当两个线程尝试修改/访问并发HashMap中的相同密钥时会发生什么?

来自分类Dev

当两个对象彼此相等时会发生什么

来自分类Dev

当两个进程侦听同一个 Berkeley/Unix [file] 套接字时会发生什么?

来自分类Dev

具有相同方法名称的两个接口,当我重写时会发生什么?

来自分类Dev

当多个进程尝试写入同一文件时会发生什么?

来自分类Dev

当多个进程尝试写入同一文件时会发生什么?

来自分类Dev

当许多进程打开相同的特殊文件时会发生什么?

来自分类Dev

当 Angular 2 的文件中有两个类,一个装饰器/一个类两个装饰器时会发生什么?

来自分类Dev

在Windows上写入aux文件时会发生什么?

来自分类Dev

为什么在文件中写入csv时会发生错误?

来自分类Dev

将两个分支与子模块合并时会发生什么?

来自分类Dev

当两个应用程序监视同一iBeacon区域时会发生什么?

来自分类Dev

当两个并发线程尝试从CopyOnWriteArrayList中删除元素时会发生什么?爪哇

来自分类Dev

两个SIP客户端同时登录时会发生什么

来自分类Dev

当您强制退出两个磁盘之间的`mv`目录操作时会发生什么?

来自分类Dev

当两个应用程序监视同一iBeacon区域时会发生什么?

来自分类Dev

当您同时触摸两个按钮时会发生什么

来自分类Dev

在 Swift 中,当两个线程获取并设置非线程安全属性时会发生什么?

来自分类Dev

rails:在 Gemfile 中指定两个 Web 服务器时会发生什么

来自分类Dev

如果两个不同网站上的会话名称相同,会发生什么?

来自分类Dev

当两个IPv6前缀长度相同时,会发生什么?

来自分类Dev

当我有两个指针指向同一个对象时会发生什么?

来自分类Dev

GCD:当两个线程想要同时在主线程上执行块时会发生什么

来自分类Dev

当您写入具有相同配置的寄存器时会发生什么?

来自分类Dev

在Linux内核中同时发生两个中断时会发生什么

Related 相关文章

  1. 1

    当多个进程尝试在两个不同文件系统之间转换相同文件时会发生什么?

  2. 2

    当两个脚本想同时使用LOCK_EX写入文件时会发生什么?

  3. 3

    当两个进程同时调用register()时会发生什么

  4. 4

    当两个线程同时调用相同的静态方法时会发生什么?

  5. 5

    当两个线程尝试修改/访问并发HashMap中的相同密钥时会发生什么?

  6. 6

    当两个对象彼此相等时会发生什么

  7. 7

    当两个进程侦听同一个 Berkeley/Unix [file] 套接字时会发生什么?

  8. 8

    具有相同方法名称的两个接口,当我重写时会发生什么?

  9. 9

    当多个进程尝试写入同一文件时会发生什么?

  10. 10

    当多个进程尝试写入同一文件时会发生什么?

  11. 11

    当许多进程打开相同的特殊文件时会发生什么?

  12. 12

    当 Angular 2 的文件中有两个类,一个装饰器/一个类两个装饰器时会发生什么?

  13. 13

    在Windows上写入aux文件时会发生什么?

  14. 14

    为什么在文件中写入csv时会发生错误?

  15. 15

    将两个分支与子模块合并时会发生什么?

  16. 16

    当两个应用程序监视同一iBeacon区域时会发生什么?

  17. 17

    当两个并发线程尝试从CopyOnWriteArrayList中删除元素时会发生什么?爪哇

  18. 18

    两个SIP客户端同时登录时会发生什么

  19. 19

    当您强制退出两个磁盘之间的`mv`目录操作时会发生什么?

  20. 20

    当两个应用程序监视同一iBeacon区域时会发生什么?

  21. 21

    当您同时触摸两个按钮时会发生什么

  22. 22

    在 Swift 中,当两个线程获取并设置非线程安全属性时会发生什么?

  23. 23

    rails:在 Gemfile 中指定两个 Web 服务器时会发生什么

  24. 24

    如果两个不同网站上的会话名称相同,会发生什么?

  25. 25

    当两个IPv6前缀长度相同时,会发生什么?

  26. 26

    当我有两个指针指向同一个对象时会发生什么?

  27. 27

    GCD:当两个线程想要同时在主线程上执行块时会发生什么

  28. 28

    当您写入具有相同配置的寄存器时会发生什么?

  29. 29

    在Linux内核中同时发生两个中断时会发生什么

热门标签

归档