免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2808 | 回复: 6
打印 上一主题 下一主题

请问fcntl函数或者其他锁函数可以锁共享内存吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-25 15:57 |只看该作者 |倒序浏览
如题

论坛徽章:
0
2 [报告]
发表于 2005-10-25 17:53 |只看该作者

请问fcntl函数或者其他锁函数可以锁共享内存吗

首先没有锁共享内存的讲法。
当然,可以设置其权限等。
fcntl操作的是文件描述符,
虽然共享内存也是通过 id 号标识,但是他和文件描述符不同,
他不能通过标准的 Open , write等接口操作。
另外,文件描述符只有在进程内区分,进程之间的不打嘎;
而共享内存的标识是整个系统都有效的。

论坛徽章:
0
3 [报告]
发表于 2005-10-25 18:05 |只看该作者

请问fcntl函数或者其他锁函数可以锁共享内存吗

大侠,怎么才能防止对共享内存访问的冲突呢?
你指的“设置其权限”能不能讲一下?
原帖由 "marlalee" 发表:
首先没有锁共享内存的讲法。
当然,可以设置其权限等。
fcntl操作的是文件描述符,
虽然共享内存也是通过 id 号标识,但是他和文件描述符不同,
他不能通过标准的 Open , write等接口操作。
另外,文件描述符只..........

论坛徽章:
0
4 [报告]
发表于 2005-10-25 22:35 |只看该作者

请问fcntl函数或者其他锁函数可以锁共享内存吗

常用的同步手段就是信号量,semaphore。
一般来说,进程之间都是通过 shared memory 来传输
规模较大的数据,同时通过semaphore 来同步。
个人认为 Posix的semaphore接口比较简洁,
用来同步shared memory正合适。

sem_open();
sem_wait();
// code to read or write shared memory
sem_post();

而SVR4就复杂一些了。可以找相关的材料,
比如<<Unix networks programming - vol2 IPC>;>;
-- written by Richard Stevens

这里要注意的是,semaphore 和 shared memory 是随内核的 IPC资源,就是说在进程中把他们被建立后,进程退出,它们还依然存在,并且
能够继续使用(如果允许的化),理由是创建它(们)的进程不知道其它进程是不是好要使用它们。如果想删除它们必须现实地调用删除的代码。这与PIPE, FIFO不同(它们是随进程的)。
在shell中可以用命令  ipcs 看到它们,用ipcrm 删除它们。

论坛徽章:
0
5 [报告]
发表于 2005-10-26 10:48 |只看该作者

请问fcntl函数或者其他锁函数可以锁共享内存吗

多谢大侠
原帖由 "marlalee" 发表:
常用的同步手段就是信号量,semaphore。
一般来说,进程之间都是通过 shared memory 来传输
规模较大的数据,同时通过semaphore 来同步。
个人认为 Posix的semaphore接口比较简洁,
用来同步shared memory正合适..........

论坛徽章:
0
6 [报告]
发表于 2006-04-11 09:12 |只看该作者
我也遇到同样的问题!
需要一个进程对共享内存定期更新
另外有多个进程对共享内存进行读操作
应该怎么办啊??

论坛徽章:
0
7 [报告]
发表于 2006-05-29 16:24 |只看该作者

我是刚毕业的,在公司实习不知我说的有没有什么问题,请多指教!!!

我今年本科毕业,6月就的回学校答辩了,上CU也有好长时间了,总感觉能力不够!

在北京瞎混,在公司干了4个月了,在linux下做了一个项目.

就是关于Share memory和Semaphore的,现在项目就快完工了,不知道老板感觉怎样.

Share memory和Semaphore组合实现IPC(System V IPC)

我用的是将semget, semctl, semop这三函数包装成sem_create, sem_remove, sem_lock, sem_unlock

还有就是shmget, shmctl, shmat, shmdt同样的做成shm_create, shm_remove, shm_attach, shm_detach

来实现进程间通信, 挺好的, 不知道你们有什么好的看法????

但是我一个问题不知道谁可以help me??
在linux下share memory! 有一个最大值的限制(shmmax),用root可以改,但不知道有没有办法用程序来改,是函数的最好????

我看了有关Oracle SGA的文章说Oracle的SGA也是用Share memory做的, 在有系统限制时Oracle将会建立多个Share memory,那样我的项目就比较难了.
不是让我作操作系统内存管理吗???????

小弟,初来,请各位楼主指教!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP