QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 675|回复: 3

一个关于ipc的问题

[复制链接]
发表于 2003-7-22 14:52:58 | 显示全部楼层 |阅读模式
比如这种情况
进程1:创建一个ipc量,...
进程2:等待这个ipc...
进程1:放出这个ipc量
进程2:得到,继续运行

但如果在2得到这个ipc以前,进程一放出ipc量之后,进程1退出了,并且删除了这个量,那么会......?
等待中的进程2会得到一个错误指示么?还是进程1这时候不能真正释放这个ipc?
 楼主| 发表于 2003-7-23 14:04:38 | 显示全部楼层
没有人知道么? 程序里试好像进程2总能收到的...不知何解?
回复

使用道具 举报

发表于 2003-7-30 23:36:52 | 显示全部楼层
首先,你是不是正确地使用 xxxctl()(msgctl/shmctl/semctl这三个),并且将IPC_RMID作为参数来删除一个IPC结构的?
如果被正确删除了,进程在调用读取消息队列内容/挂接共享内存时应该会收到错误EIDRM,
anyway,如果让进程1放出IPC量后删除IPC结构并退出企图阻止进程2收到IPC量的算法是个典型的竞态(competition)问题,不能武断地认定在进程1放出ipc量之后,系统会马上执行删除IPC结构而后退出,除非你设法让他成为一个原子操作(关中断?...),系统很可能不如你所愿地调度了进程2,结果就是收到了进程1的通信数据。这种执行结果依赖于进程的执行顺序就叫competition。
回复

使用道具 举报

 楼主| 发表于 2003-8-1 12:11:06 | 显示全部楼层
?楼上的在说什么?我没有在说什么有没有这个进程间的竞争问题(为什么要说“竞态”?很流行么?)我也没有认为进程一一定是在进程二得到ipc前成功的释放了ipc量(实际效果来看好像没有释放 因为进程二总是得到了这个ipc了)可能是...也可能是...
反正我的考虑是:是不是系统调度的时候 优先考虑了那些新得到ipc而唤醒的进程 而导致企图释放ipc的进程的释放动作总是落后了?
不过还没有试过 没有post一个ipc量就直接删掉它的 在我用到的系统里面 这么做好象是会让等待的进程死掉的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 08:58 , Processed in 0.064716 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表