社区
Linux/Unix社区
帖子详情
关于共享内存的问题
AntonlioX
2006-08-26 09:26:53
使用POSIX的shm_open,shm_unlink
1 如何保证一个进程先创建并初始化一块共享内存后,另一个进程才访问能这块共享内存。
2 如果一个进程执行了shm_unlink后,是不是这块共享内存其他进程正在使用的,就被释放了?
如果不是,那么如果有个新的进程使用同样的共享内存名字来创建新的共享内存,是不是创建的是新的一个共享内存,与前面创建的共享内存不是同一块?
谢谢
...全文
477
11
打赏
收藏
关于共享内存的问题
使用POSIX的shm_open,shm_unlink 1 如何保证一个进程先创建并初始化一块共享内存后,另一个进程才访问能这块共享内存。 2 如果一个进程执行了shm_unlink后,是不是这块共享内存其他进程正在使用的,就被释放了? 如果不是,那么如果有个新的进程使用同样的共享内存名字来创建新的共享内存,是不是创建的是新的一个共享内存,与前面创建的共享内存不是同一块? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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系统的其它代码,也是非常有帮助的。
java
共享内存
_Java
共享内存
1
共享内存
对应应用开发的意义对熟知UNIX系统应用开发的程序员来说,IPC(InterProcessCommunication)机制是非常熟悉的,IPC基本包括
共享内存
、信号灯操作、消息队列、信号处理等部分,是开发应用中非常重要的必不可少的工具。其中
共享内存
IPC机制的关键,对于数据共享、系统快速查询、动态配置、减少资源耗费等均有独到的优点。对应UNIX系统来说,
共享内存
分为一般
共享内存
和映...
共享内存
的使用
这是Linux
共享内存
的创建函数,调用该函数后Linux的内核就可以申请一块内存,并且
共享内存
是以”页”作为单位,一页等于4KB = 4096bytes,所以在创建
共享内存
的时候大小最好是4KB的整数倍。shmctl是删除
共享内存
的方法,它可以将
共享内存
的状态标记为删除状态。值得注意的是,当
共享内存
被标识为删除状态后,它不会被马上删除,直到所有进程全部和
共享内存
全部解除关联,才会彻底被删除。当进程不需要操作
共享内存
,可以让进程之间和
共享内存
解除关联,进程推出之后,就结束进程和
共享内存
关联就自动解除。
关于Linux系统之
共享内存
段删除
问题
处理
列出占用
共享内存
的进程id号,使用kill -9 id号命令删除后,可以删除部分的
共享内存
段,但是每次重新登录都会出来新的shmid
共享内存
段。2.想要删除这些没有用的内存段使用命令ipcrm -m shmid 结果没有任何作用,网上大部分说是有进程占用了这个内存段。3.这个
问题
始终不知道是什么原因导致,知道我们禁用了Linux系统的GUI界面后,
共享内存
段恢复正常。1.现象是
共享内存
中的有大量的key值为0x00000000的内存段。4.Linux系统禁用GUI界面操作,设置默认启动到命令行界面。
java 读写
共享内存
_java实现
共享内存
操作
对UNIX系统来说,
共享内存
分为一般
共享内存
和映像文件
共享内存
两种,对windows实际上只有映像文件
共享内存
一种。所以java应用中也是只能创建映像文件
共享内存
。使用
共享内存
,有如下几个特点:1、可以被多个进程打开访问。2、读写操作的进程在执行读写操作时其他进程不能进行写操作。3、多个进程可以交替对某一
共享内存
执行写操作。4、一个进程执行了内存的写操作后,不影响其他进程对该内存的访问。同时其他进...
Linux/Unix社区
23,223
社区成员
74,537
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章