首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当两个进程写入mmaped文件的同一部分时,会发生什么情况?

问当两个进程写入mmaped文件的同一部分时,会发生什么情况?
EN

Stack Overflow用户
提问于 2013-12-28 05:41:23
回答 1查看 5.2K关注 0票数 4

我正在编写一个C程序,它使用mmap系统调用,运行在Linux3.12-64位上。

如果我有两个进程对磁盘文件的相同区域进行读/写访问,然后同时修改两个进程的区域内容.

  • 一个进程能看到(读取)另一个进程在msync之前或之后所做的更改数据吗?
  • 如果其他进程可以看到更新--在Linux实现做出保证之前是否发生了?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-28 05:44:56

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

必须设置MAP_SHARED标志:

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

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

不,如果使用原始mmap() API,则不存在“前后保证”,如果希望同时读取/写入数据,则必须使用某种类型的锁定(例如信号量)。

同时,来自理解内存映射

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

对于任何*nix变体,包括Linux和AIX,上述都是正确的。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20811434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档