基于互斥量的进程的操作
(一) 相关背景.
企业信息化进程的逐步推进,从而要求越来越多的以前单一、独立的业务系统要进行整合和统一管理.比如统一的登录界面等.门户集成技术也应运而生.而在门户集成技术很重要的一个功能是要求应用程序的集成.所谓应用程序集成,应用程序集成指通过数据共享和自动化交易连接不同系统。例如,企业解决方案集成 (EAI) 可连接 HR 系统和工资及会计应用程序。尽管这些应用程序在门户实施中无需彼此直接集成,但由于门户为多个应用程序和内容来源提供单一界面,因此他们可能必须自行与门户进行通信. 与此同时,这也给基于C/S模式架构下的子业务系统(如p-2中的业务系统A)带来一些困扰.
(二) 问题提出.
我们将用一个简单的模型来说明问题是如何出现的.
p-1
如p-1中见到的,当我们的用远程桌面或第三方软件访问服务器时.众所周知,通过p-1中的访问,所有程序都将在服务器端执行.那么就出现了一个问题:当很多个用户同时用这种方式登录服务器时,并且同时通过门户访问同一个业务系统(如p-2中虚线中的业务系统A)时,必然会导致服务器端出现很多个业务系统A的进程.
p-2
然而,当服务器端出现很多个系统A的进程后,就必然导致一个问题:在不同的用户并行访问时,如果门户只提供统一的登录界面.那么当用户通过门户启动了一个业务系统之后,怎么通过门户在去操作它们. 举例说明,如p-2中图所示,用户1和用户2分别通过远程桌面的方式访问了服务器,并且在各个用户的本地,当他们同时都调用了系统A后,用户1中的企业门户怎么去操作自己的启动的系统A,同理,用户2也一样.也即是我们所面临的问题:在多个同一功能的进程中,如何随需管理进程并进程通信?有人会问,不是可以通过句柄或者子 --父进程去操作它们吗?我们说,这种方法能力有限.比如在这种情况下:门户不止在同一个地方去启动业务系统A,而同时又要要求一个用户下只有一个业务系统A在运行.而这种情况之下,启动的业务系统A的父进程永远是门户进程,句柄亦然.
(三) 解决方法.
问题的出现,给不同的用户并行操作时带来很可怕的后果,使整个操作发生紊乱.仔细分析这种情况后 ,我们提出一种很通用且很简单的操作的方法:用互斥量作为各业务系统进程的标记,那么在不同用户进行操作时,可以根据标记的互斥量进行操作和管理.对互斥量标记的定义:
自己的标志+processId+SessionID.
其中processId(p-3中PID):是业务系统运行后服务器端的进程号,SessionID(p-3中会话ID):不同用户服务器后的会话ID,自己的标志:能够区分业务系统A的标记.而各业务系统自己能得到自己的这些信息,所以只要各用户在启动企业门户时记录下新启动的相关的业务子系统的processId和SessionID在加上识别业务系统A的特别标记.部分代码如下: