关于共享内存的问题

AntonlioX 2006-08-26 09:26:53
使用POSIX的shm_open,shm_unlink

1 如何保证一个进程先创建并初始化一块共享内存后,另一个进程才访问能这块共享内存。

2 如果一个进程执行了shm_unlink后,是不是这块共享内存其他进程正在使用的,就被释放了?
如果不是,那么如果有个新的进程使用同样的共享内存名字来创建新的共享内存,是不是创建的是新的一个共享内存,与前面创建的共享内存不是同一块?

谢谢
...全文
428 11 打赏 收藏 转发到动态 举报
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的时候加锁这样就能保证没有其他线程正在使用。因为同一时刻只有一个线程才能加锁成功.其他线程都会等待.

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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