免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: plscareme
打印 上一主题 下一主题

进程间的函数调用算是进程间通信的一种方式吗 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-12-07 22:49 |只看该作者
非常感谢大家的指导.的确,我是把静态的代码编译共享和动态的进程运行没有说清楚.我解释一下这个问题的背景,也顺便进一步请教大家.也解释一下为什么我有这个疑惑.

这个应该,应该最开始只有一个进程,然后分出了好几个线程.因为线程共享进程的空间.所以这些线程(在这个应用中映射为各个不同task)共享了很短全局变量(不是那种系统提供的让进程共享的全局数据).所以看起来这个应用有很多模块.从代码的角度来看,各个模块间有很多函数调用.

现在这个系统要升级,task要映射到进程,也就是说原来的很多线程要变成进程.这就涉及到原来的很多全局变量以及与之相关的函数调用的code修改,这里的函数主要是用来读写这些全局变量,不过却没有互斥机制.我不知道线程的工作机制,不过我想这应该要有的吧,不知道为什么原来的应用他们没有写,或者是我对多线程的理解有误.

当然,我想,就算是线程,原来的函数也只是代码的共用,编译link后都变成各个线程自己的代码装载了.在这种情况下,这个全局变量存储在整个进程中只有一份,对所有的线程而言,当然也只有一份,这也是为什么称它为全局变量.

现在有人说这些变量和函数调用依然要保留不动,我很不能理解.

我想如果要保留这些东西,只有两种可能性,一种是将原来的那种全局变量升级成进程共享的数据,然而这样一来做的话,需要加上互斥这些操作,这样一来,不论是变量还是那些调用函数,都需要修改.二是以以下的方式.我写了一段伪码:

type var1, var2.

void main()
{
...
fork child process 1
fork child process 2

}
这样一来,通过在应用的入口,也就是主进程中初始化这些所谓的全局变量. 然后所有的各个子进程在自己的数据空间中在存储一份这些变量.如上面的代码,就有3份数据了,这也不能叫什么全局变量!!!!

前面两种方法我都觉得不可以理解,我想最后可能还是要用消息传递这些数据,那这样一来那些所谓的我前面所说的"进程间的函数调用"就要去掉了!

我现在也不太清楚有人说的原来的那些变量不变,函数调用也不变到底是个啥意思!

论坛徽章:
0
12 [报告]
发表于 2005-12-08 00:56 |只看该作者
必须通过共享内存等 IPC 机制实现,因为进程之间是默认没有共享内存区域,而线程之间默认是共享内存区域的。这是线程和进程的基本区别。

论坛徽章:
0
13 [报告]
发表于 2005-12-08 21:40 |只看该作者
这个问题我也放到csdn了,连接如下:
http://community.csdn.net/Expert ... 4.xml?temp=.1309931

论坛徽章:
0
14 [报告]
发表于 2005-12-09 11:06 |只看该作者

RPC可以实现该机制,不过需要做一些额外的工作

RPC在linux和Win下面都有相应的实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP