社区
Linux/Unix社区
帖子详情
关于共享内存的问题
AntonlioX
2006-08-26 09:26:53
使用POSIX的shm_open,shm_unlink
1 如何保证一个进程先创建并初始化一块共享内存后,另一个进程才访问能这块共享内存。
2 如果一个进程执行了shm_unlink后,是不是这块共享内存其他进程正在使用的,就被释放了?
如果不是,那么如果有个新的进程使用同样的共享内存名字来创建新的共享内存,是不是创建的是新的一个共享内存,与前面创建的共享内存不是同一块?
谢谢
...全文
430
11
打赏
收藏
关于共享内存的问题
使用POSIX的shm_open,shm_unlink 1 如何保证一个进程先创建并初始化一块共享内存后,另一个进程才访问能这块共享内存。 2 如果一个进程执行了shm_unlink后,是不是这块共享内存其他进程正在使用的,就被释放了? 如果不是,那么如果有个新的进程使用同样的共享内存名字来创建新的共享内存,是不是创建的是新的一个共享内存,与前面创建的共享内存不是同一块? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
isnowran
2006-09-04
打赏
举报
回复
shm_open
1. mkdir dir
2. mount with tmpfs
3. create a fiel in this dir
3. mmap this file
struggleyb
2006-08-29
打赏
举报
回复
按照linux的习惯,unlink不应该是简单的删掉相应的文件,而应该是减少文件使用计数,直到使用计数为0时,再删掉文件
nuaa3
2006-08-29
打赏
举报
回复
建议不要使用shm_open ??
那用什么创建
isnowran
2006-08-28
打赏
举报
回复
shm_open =
1. create file in /dev/shm
2. mmap /dev/shm/file
shm_unlink =
1. remove /dev/shm/file
建议不要使用shm_open,当你chroot后,创建会失败,照着上述步骤,手工实现比较灵活
nuaa3
2006-08-28
打赏
举报
回复
帮你顶
AntonlioX
2006-08-26
打赏
举报
回复
up
AntonlioX
2006-08-26
打赏
举报
回复
请大家指点一下
AntonlioX
2006-08-26
打赏
举报
回复
up
AntonlioX
2006-08-26
打赏
举报
回复
我说的清楚点:
如果一个进程执行了shm_unlink后,是不是就释放了这块共享内存, 其他进程即使正在使用这个共享内存,也要被释放?
如果不是,而只是把/dev/shm/的对应某个文件给删掉 , 那么如果有个新的进程使用同样的共享内存名字来创建新的共享内存,是不是创建的是新的一个共享内存,与前面创建的共享内存不是同一块?
AntonlioX
2006-08-26
打赏
举报
回复
shm_unlink 到底实现了什么功能? 我感觉它只是简单的把 在/dev/shm/的某个文件给删掉了
fytzzh
2006-08-26
打赏
举报
回复
加锁. 修改共享的时候就要做互斥.
在shm_unlink的时候加锁这样就能保证没有其他线程正在使用。因为同一时刻只有一个线程才能加锁成功.其他线程都会等待.
Android专用驱动
Android专用驱动构成了Android运行时的基石。从技术上来讲,Android专用驱动也是整个Android系统的亮点,特别是Binder驱动。Binder是一种进程间通信机制(IPC),它与传统的IPC机制对比,最大的特点是高效,因为通信数据在两个进程之间只需要执行一次拷贝即可。Binder在Android系统里面使用得非常广泛以及频繁。在涉及到比较大的通信数据时,Binder通常还结合另外一个驱动Ashmem来使用。Ashmem是一个
共享内存
驱动,它与传统的
共享内存
相比,最大的特点是它是通过文件描述符来描述的,并且可以动态地进行分块管理。动态分块管理的目的是可以将部分不再使用了的内存交回给系统,非常适合内存较小的移动设备使用。另外一个专用驱动Logger是一个日志驱动,它与传统的日志系统对比,特点是日志是记录在内核空间而非文件中,这样就可以提高日志的读写速度。这个PPT讲Logger、Binder和Ashmem三个Android专用驱动的实现原理。由于这三个驱动在Android源代码里面用得非常广泛和频繁,因此理解它们的实现原理,就可以掌握Android的精华。这对以后阅读Android系统的其它代码,也是非常有帮助的。
进程间通信——
共享内存
(Shared Memory)
共享内存
是System V版本的最后一个进程间通信方式。
共享内存
,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,
共享内存
是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问
共享内存
中的地址。如果某个进程向
共享内存
写入数据,所做的改动将立即影响到可以访问同一段
共享内存
的任...
关于内存泄漏
问题
(
共享内存
、请求调页、缺页异常处理)
1.
问题
描述 最近发现了一个
问题
,当不同的进程申请了同一块
共享内存
时,会有内存泄漏现象,即当程序运行时,有些进程的内存会逐渐 增加,波动幅度较为明显。 2.
问题
排查 通过调试排查,我们发现是
共享内存
引起的。我们用两个进程分别初始化同一个
共享内存
(5M),然后什么都不做,测试结果是第一个进程占用的内存是5M左右,第二个进程占用的内存是200K左右,结果如下图所示。 ...
共享内存
_shmget
文章目录
共享内存
创建
共享内存
映射
共享内存
删除
共享内存
父子进程
共享内存
共享内存
通信
共享内存
共享内存
是被多个进程共享的一部分物理内存。一个进程向
共享内存
写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。 如下图所示,
共享内存
的地址在进程A中的地址可能是0x5000,在进程B中的地址可能是0x7000,这是因为
共享内存
映射到不同进程当中的不同位置。
共享内存
的实现分为2个步骤: 使用shmget函数创建
共享内存
。 使用shmat函数将创建的
共享内存
映射到具体的进程空间。 创建共
IPC通信--
共享内存
在进程B中,同样创建一个
共享内存
对象并将其连接到已存在的
共享内存
段。然后,等待一段时间以便其他进程可以写入数据。接着,从
共享内存
中读取数据并打印出来。然后,将数据写入
共享内存
。最后,分离
共享内存
对象。在进程A中,首先创建一个
共享内存
对象并将其连接到已存在的
共享内存
段。然后,将数据写入
共享内存
,并等待一段时间以便其他进程可以读取数据。接着,从
共享内存
中读取数据并打印出来。最后,分离
共享内存
对象。,以便在不同的进程之间
共享内存
。,以便在多个进程之间
共享内存
。用于连接进程和
共享内存
。用于获取
共享内存
,而。
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章