社区
Linux/Unix社区
帖子详情
关于共享内存的问题
AntonlioX
2006-08-26 09:26:53
使用POSIX的shm_open,shm_unlink
1 如何保证一个进程先创建并初始化一块共享内存后,另一个进程才访问能这块共享内存。
2 如果一个进程执行了shm_unlink后,是不是这块共享内存其他进程正在使用的,就被释放了?
如果不是,那么如果有个新的进程使用同样的共享内存名字来创建新的共享内存,是不是创建的是新的一个共享内存,与前面创建的共享内存不是同一块?
谢谢
...全文
446
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系统的其它代码,也是非常有帮助的。
Dalvik虚拟机 PPT版
Android应用程序是运行在Dalvik虚拟机里面的,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。Android应用程序中的Dalvik虚拟机实例实际上是从Zygote进程的地址空间拷贝而来的,这样就可以加快Android应用程序的启动速度。Dalvik虚拟机与Java虚拟机共享有差不多的特性,例如,它们都是解释执行,并且支持即时编译(JIT)、垃圾收集(GC)、Java本地方法调用(JNI)和Java远程调试协议(JDWP)等,差别在于两者执行的指令集是不一样的,并且前者的指令集是基本寄存器的,而后者的指令集是基于堆栈的。这个PPT讲Dalvik虚拟机的内存管理、垃圾收集、即时编译、Java本地调用、进程和线程管理等。理解Dalvik虚拟机的上述实现细节,有助于在运行时修改程序的行为,例如,拦截Java函数的调用。
关于Linux系统之
共享内存
段删除
问题
处理
列出占用
共享内存
的进程id号,使用kill -9 id号命令删除后,可以删除部分的
共享内存
段,但是每次重新登录都会出来新的shmid
共享内存
段。2.想要删除这些没有用的内存段使用命令ipcrm -m shmid 结果没有任何作用,网上大部分说是有进程占用了这个内存段。3.这个
问题
始终不知道是什么原因导致,知道我们禁用了Linux系统的GUI界面后,
共享内存
段恢复正常。1.现象是
共享内存
中的有大量的key值为0x00000000的内存段。4.Linux系统禁用GUI界面操作,设置默认启动到命令行界面。
Linux
共享内存
创建和删除
define SHM_SIZE (64 + 32) // 公钥64字节 + 私钥32字节。// 假设这里已经成功设置了
共享内存
的大小。// 映射
共享内存
到进程地址空间。// 初始化
共享内存
并设置公钥和私钥。// 复制公钥和私钥到
共享内存
。// 初始化
共享内存
并设置公钥和私钥。// 删除
共享内存
的名称。// 取消映射
共享内存
。// 设置
共享内存
的大小。// 清理并删除
共享内存
。// 清理并删除
共享内存
。
【Swoole】关于
共享内存
今天讲什么呢?是的没错,
共享内存
。
共享内存
是Linux进程中通信的一种方式,其余的方式还有消息队列,使用信号量等。所谓
共享内存
就是指两个不相关的进程访问同一块逻辑内存,
共享内存
是两个正在运行的进程之间分享和传递数据的一种非常有效的方式,他们的
共享内存
通常都安排在一块物理内存上,然后进程可以把
共享内存
连接到自己的地址空间,这样所有的进程就都可以通过共享空间访问进程了。
共享内存
的使用是通过一组函数接
Linux/Unix社区
23,220
社区成员
74,543
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章