共享内存的初级菜鸟问题(在线等,谢谢)

joseph_hsw 2014-03-04 04:19:17
在多进程程序中使用Posix共享内存的时候。
每一个进程使用某同一块共享内存时候都必须完成以下步骤吗?
1.shm_open
2.ftruncate
3.mmap

如果使用完,是否需要通过
munmap
来解除文件映射呢?还是说直到进程关闭的时候才去munmap?

...全文
187 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianpanlanyue 2014-03-08
  • 打赏
  • 举报
回复
是的。 用完后,是需要unmap的。 多个进程访问共享内存,内核是用引用计数去标记这个共享内存对象的。 每个进程用完后,unmap一下,这个引用计数就递减1,直到0的时候,意味着没有任何对象再去访问这个共享内存对象,内核就去回收资源。 当然了,一个进程如果没有unmap的话,进程结束后,操作系统在回收进程资源的时候,会去检查其内核对象引用表,发现其还持有一个共享内存对象的时候,也会主动将引用计数减一。但程序中申请、释放最好做到配对使用,养成好的代码风格和习惯。
joseph_hsw 2014-03-07
  • 打赏
  • 举报
回复
引用 4 楼 njynjylq 的回复:
一般如果多个进程使用共享内存的话,在所有进程,都是用完共享内存之后,就可以断开映射了
每一个进程,每一次使用都是需要 1.shm_open 2.ftruncate 3.mmap 4.munmap 这四个步骤吗?
joseph_hsw 2014-03-05
  • 打赏
  • 举报
回复
没人回????
njynjylq 2014-03-05
  • 打赏
  • 举报
回复
一般如果多个进程使用共享内存的话,在所有进程,都是用完共享内存之后,就可以断开映射了
njynjylq 2014-03-05
  • 打赏
  • 举报
回复
共享内存使用完后,需要断开映射
joseph_hsw 2014-03-04
  • 打赏
  • 举报
回复
mmap可以不可以理解为new,而munmap理解为delete呢?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧