CN102147751B - 一种多进程间的通信方法 - Google Patents

一种多进程间的通信方法 Download PDF

Info

Publication number
CN102147751B
CN102147751B CN2011101049666A CN201110104966A CN102147751B CN 102147751 B CN102147751 B CN 102147751B CN 2011101049666 A CN2011101049666 A CN 2011101049666A CN 201110104966 A CN201110104966 A CN 201110104966A CN 102147751 B CN102147751 B CN 102147751B
Authority
CN
China
Prior art keywords
mutual exclusion
dynamic area
service processes
processes
interim service
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2011101049666A
Other languages
English (en)
Other versions
CN102147751A (zh
Inventor
马家智
区智殷
王瑞彪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Feinno Communication Technology Co Ltd
Original Assignee
Beijing Feinno Communication Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Feinno Communication Technology Co Ltd filed Critical Beijing Feinno Communication Technology Co Ltd
Priority to CN2011101049666A priority Critical patent/CN102147751B/zh
Publication of CN102147751A publication Critical patent/CN102147751A/zh
Application granted granted Critical
Publication of CN102147751B publication Critical patent/CN102147751B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Hardware Redundancy (AREA)

Abstract

本发明公开了一种多进程间的通信方法。该方法包括:首先尝试打开共享内存,如果不能打开则进程创建共享内存,在共享内存的静态区写入共享内存信息,根据临时服务进程权限互斥获得临时服务进程权限,将自身的地址及互斥写入动态区,等待其他进程加入该多进程通信系统,如果能打开则访问共享内存的静态区,获得共享内存信息,根据动态区的读写互斥获得动态区的访问权限,从动态区获取临时服务进程的地址以及临时服务进程的互斥,然后释放动态区的访问权限,根据临时服务进程的地址和互斥实现与服务进程的通信,进而加入该多进程通信系统。本发明的技术方案能够实现多进程间的可靠通信。

Description

一种多进程间的通信方法
技术领域
本发明涉及计算机技术领域,特别是涉及一种多进程间的通信方法。 
背景技术
在Window的桌面应用程序开发中,经常会遇到进程间需要通信的问题。常见的多进程间通信方法有:共享内存方式、匿名管道、命名管道、WM_COPYDATA、Sockets等。在上诉方法中共享内存方法对于多个进程间通信支持最好,而且具有比较好的安全性。 
在以共享内存为基础实现多进程间通信的方法中,一般使用客户端/服务器(Client/Server)架构。具体为:在通信系统中有一个Server,由Server来控制共享内存的生存周期。当有新进程加入到通信系统中来时,也是向Server发起请求。当需要退出时也需要告诉Server。当Server无效时,整个通信系统将无法使用。 
可见现有的以共享内存为基础实现的多进程通信的方法的最大的缺点,就是在通信中过于依赖Server,所有的应用程序都认为Server是可信的,但是当Server被关闭,或者异常时通信就会问题。因此这种多进程间的通信系统仍不可靠。 
发明内容
本发明提供了一种多进程间的通信方法,该方法能够实现多进程间的可靠通信。 
为达到上述目的,本发明的技术方案是这样实现的: 
本发明公开了一种多进程间的通信方法,其特征在于,共享内存被划分为数据区和控制区,其中控制区又被划分为静态区和动态区,则任一当前进程加入多进程通信系统的过程包括: 
A、当前进程尝试打开共享内存,如果能打开则执行步骤E至步骤G,如果不能打开则执行步骤B至步骤D; 
B、当前进程创建共享内存,在共享内存的静态区写入共享内存信息;其中共享内存信息包括:数据区的读写互斥、动态区的读写互斥和临时服务进程权限互斥; 
C、当前进程根据临时服务进程权限互斥获得临时服务进程权限; 
D、当前进程将自身的地址及互斥写入动态区,等待其他进程加入该多进程通信系统; 
E、当前进程访问共享内存的静态区,获得共享内存信息; 
F、当前进程根据动态区的读写互斥获得动态区的访问权限,从动态区获取临时服务进程的地址以及临时服务进程的互斥,然后释放动态区的访问权限; 
G、当前进程根据临时服务进程的地址和互斥实现与服务进程的通信,进而加入该多进程通信系统。 
所述步骤D进一步包括: 
当前进程将自身的地址及互斥写入动态区之前,根据动态区的读写互斥获得动态区的访问权限; 
当前进程将自身的地址及互斥写入动态区之后,释放对动态区的访问权限。 
所述动态区用于保存临时服务进程的地址和互斥,且只有临时服务进程能改写动态区的信息。 
所述步骤G包括: 
G1、当前进程向临时服务进程请求加入该多进程通信系统,临时服务进程将当前进程的地址以及互斥同步给该多进程通信系统中的其他进程; 
G2、当前进程向临时服务进程请求该多进程通信系统中的其他进程的地址以及互斥,临时服务进程将所述其他进程的地址和互斥同步给当前进程; 
G3,开始多进程间的通信。 
当有进程退出所述多进程通信系统时,该方法进一步包括: 
退出的进程释放本进程的互斥; 
多进程通信系统中的其他进程检测到有进程退出后,执行以下步骤:判断退出的进程是否为临时服务进程,如果是则争夺临时服务进程权限;如果争夺成功,则获取动态区的访问权限,将自身的地址及互斥写入动态区,然后释放对动态区的访问权限。 
多进程通信系统中的其他进程检测到有进程退出后,所执行的步骤还包括: 
当判断出退出的进程不是临时服务进程时,无操作; 
以及在争夺临时服务进程权限失败时,无操作。 
在所述判断退出的进程是否为临时服务进程之前进一步包括:所述多进程通信系统中的其他进程删除退出的进程在本进程中的记录。 
所述判断退出的进程是否为临时服务进程包括:判断退出的进程的互斥是否与动态区中的临时服务进程的互斥相同,如果相同,则退出进程是临时服务进程。 
所述争夺临时服务进程权限包括:获取静态区中的临时服务进程权限互斥,如果能够根据所获取的临时服务进程权限互斥能够获得临时服务进程权限,则争夺成功。 
所述多进程通信系统中的其他进程检测到有进程退出包括:多进程通信系统中的其他进程通过应用程序编程接口API等待互斥的方式,检测出有进程退出。 
由上述可见,本发明这种当任一当前进程要加入多进程通信系统时,首先尝试打开共享内存;如果不能打开则进程创建共享内存,在共享内存的静态区写入共享内存信息,根据临时服务进程权限互斥获得临时服务进程权限,将自身的地址及互斥写入动态区,等待其他进程加入该多进程通信系统;如果能打开则访问共享内存的静态区,获得共享内存信息,根据动态区的读写互斥获得动态区的访问权限,从动态区获取临时服务进程的地址以及临时服务进程的互斥,然后释放动态区的访问权限,根据临时服务进程的地址和互斥实现与服务进程的通信,进而加入该多进程通信系统的技术方案,由于在通信的整个过程中不是由固定的进程作为服务进程,取而代之的是临时服务进程,因此整个通信系统不会依赖某个固定的进 程,多个进程之间的通信更加可靠。 
附图说明
图1是本发明中的共享内存的划分示意图; 
图2是本发明中的新进程加入多进程通信系统时的流程图; 
图3是本发明中的多进程通信系统中的进程检测到有进程退出时所执行的流程图。 
具体实施方式
本发明的整体思路为:当有新进程加入时,能通过共享内存找到临时服务进程(即临时Server),临时服务进程的地址写入到共享内存中的一个区域,这个区域将不参加数据通信。并通过临时服务进程同步地址,使得每个进程都拥有其他进程的互斥,通过应用程序编程接口(API,Application Programming Interface)等待互斥将能检测出有进程退出,当有进程退出时其他进程都知道。当临时服务进程退出,或者异常退出时,其他进程中的一个马上开始提供Server服务。 
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。 
图1是本发明中的共享内存的划分示意图。如图1所示,共享内存被分为两部分:一部分为数据区,一部分为控制区;其中控制区又分为静态区和动态区。静态区用于保存共享内存信息,包括:数据区的读写互斥、动态区的读写互斥和临时服务进程权限互斥,这些信息是不能被改变的,共享内存被创建时被写入,在以后的共享内存生存期里将不会再改变。动态区是专门为解决无主控通信问题而设计的,这个区用于写入临时服务进程的地址以及互斥信息,供给新加入本多进程通信系统的进程同步地址和互斥使用,这个区只有临时服务进程可以改写。当有新进程加入到该多进程通信系统时,向临时服务进程询问该系统中的进程的地址和互斥,通过就可以进行通信,通过互斥就可以知道有进程退出。数据区用于保存通信过程中的数据。 
下面基于上述共享内存给出新进程加入多进程通信系统的流 程以及进程退出多进程通信系统时的执行流程。 
图2是本发明中的新进程加入多进程通信系统时的流程图。如图2所示,任一当前进程加入多进程通信系统的过程包括如下步骤: 
步骤201,当前进程尝试打开共享内存,如果能打开,则表示已经有共享内存存在并已经有临时服务进程存在,执行步骤207至214;如果不能打开,则说明多进程通信系统还没有建立,执行步骤202至207。 
步骤202,当前进程创建共享内存,在共享内存的静态区写入共享内存信息;其中共享内存信息包括:数据区的读写互斥、动态区的读写互斥和临时服务进程权限互斥。 
步骤203,当前进程根据动态区的读写互斥获得动态区的访问权限。 
步骤204,当前进程根据临时服务进程权限互斥获得临时服务进程权限。 
步骤205,当前进程将自身的地址及互斥写入动态区。 
本步骤中,当前进程成为临时服务进程。 
步骤206,当前进程释放对动态区的访问权限。等待其他进程加入本多进程通信系统。 
步骤207,当前进程访问共享内存的静态区,获得共享内存信息。 
步骤208,当前进程根据动态区的读写互斥获得动态区的访问权限。 
步骤209,当前进程从动态区获取临时服务进程的地址以及临时服务进程的互斥。 
步骤210,当前进程释放动态区的访问权限。 
步骤211,当前进程向临时服务进程请求加入该多进程通信系统。 
步骤212,临时服务进程将当前进程的地址以及互斥同步给该多进程通信系统中的其他进程。 
步骤213,当前进程向临时服务进程请求该多进程通信系统中 的其他进程的地址以及互斥。 
步骤214,临时服务进程将所述其他进程的地址和互斥同步给当前进程。开始多进程间的通信。 
当进程出动退出多进程通信系统时,需要释放本进程的互斥。当进程异常退出通信系统时,因为有之前就同步好的互斥,所以进程退出多进程通信系统时,其他进程可以检测到。因此当有进程退出多进程通信系统时,因为互斥关系,在多进程通信系统中的每个进程都能知道有进程退出。具体地多进程通信系统中的进程通过应用程序编程接口API等待互斥的方式,检测出有进程退出。 
多进程通信系统中的其他进程检测到有进程退出后,执行图3所示的流程。 
图3是本发明中的多进程通信系统中的进程检测到有进程退出时所执行的流程图。如图3所示,包括以下步骤: 
步骤301,删除退出的进程在本进程中的记录。 
步骤302,判断退出的进程是否为临时服务进程,是则执行步骤303,否则无操作。 
本步骤中,判断退出的进程的互斥是否与动态区中的临时服务进程的互斥相同,如果相同,则退出进程是临时服务进程。 
步骤303,争夺动态区的访问权限,如果争夺成功则作为新的临时服务进程,执行步骤304至步骤306,如果争夺失败则执行步骤307至步骤309。 
步骤304,根据临时服务进程权限互斥获得临时服务进程权限。 
步骤305,将自身的地址及互斥写入动态区。 
本步骤中,该进程用自身的地址及互斥更新动态区中的信息,成为新的临时服务进程。 
步骤306,释放对动态区的访问权限。等待其他进程加入本多进程通信系统。 
步骤307,等待获取动态区的访问权限。 
步骤308,待获得动态区的访问权限后,从动态区获取新的临 时服务进程的地址以及该新的临时服务进程的互斥。 
步骤309,释放动态区的访问权限。继续多进程间的通信。 
综上所述,本发明给出的这种多进程间的通信方法中,在通信的整个过程中不存在特定的服务进程,取而代之的是临时服务进程,在这个系统中,任一参与通讯的进程都不信任包括临时服务进程在内的可靠性,一但有进程崩溃,其它进程会根据出现状况调节共享内存状态,甚至提升自己为临时服务进程,因此有效提高了整个通信系统的稳定性。 
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。 

Claims (10)

1.一种多进程间的通信方法,其特征在于,共享内存被划分为数据区和控制区,其中控制区又被划分为静态区和动态区,则任一当前进程加入多进程通信系统的过程包括:
A、当前进程尝试打开共享内存,如果能打开则执行步骤E至步骤G,如果不能打开则执行步骤B至步骤D;
B、当前进程创建共享内存,在共享内存的静态区写入共享内存信息;其中共享内存信息包括:数据区的读写互斥、动态区的读写互斥和临时服务进程权限互斥;
C、当前进程根据临时服务进程权限互斥获得临时服务进程权限;
D、当前进程将自身的地址及互斥写入动态区,等待其他进程加入该多进程通信系统;
E、当前进程访问共享内存的静态区,获得共享内存信息;
F、当前进程根据动态区的读写互斥获得动态区的访问权限,从动态区获取临时服务进程的地址以及临时服务进程的互斥,然后释放动态区的访问权限;
G、当前进程根据临时服务进程的地址和互斥实现与服务进程的通信,进而加入该多进程通信系统。
2.根据权利要求1所述的方法,其特征在于,
在步骤C之前该方法进一步包括:当前进程根据动态区的读写互斥获得动态区的访问权限;
所述步骤D进一步包括:当前进程将自身的地址及互斥写入动态区之后,释放对动态区的访问权限。
3.根据权利要求1所述的方法,其特征在于,所述动态区用于保存临时服务进程的地址和互斥,且只有临时服务进程能改写动态区的信息。
4.根据权利要求1所述的方法,其特征在于,所述步骤G包括:
G1、当前进程向临时服务进程请求加入该多进程通信系统,临时服务进程将当前进程的地址以及互斥同步给该多进程通信系统中的其他进程; 
G2、当前进程向临时服务进程请求该多进程通信系统中的其他进程的地址以及互斥,临时服务进程将所述其他进程的地址和互斥同步给当前进程;
G3,开始多进程间的通信。
5.根据权利要求1或4所述的方法,其特征在于,当有进程退出所述多进程通信系统时,该方法进一步包括:
退出的进程释放本进程的互斥;
多进程通信系统中的其他进程检测到有进程退出后,执行以下步骤:判断退出的进程是否为临时服务进程,如果是则争夺动态区的访问权限;如果争夺成功,则获取临时服务进程权限,将自身的地址及互斥写入动态区,然后释放对动态区的访问权限。
6.根据权利要求5所述的方法,其特征在于,多进程通信系统中的其他进程检测到有进程退出后,所执行的步骤还包括:
当判断出退出的进程不是临时服务进程时,无操作。
7.根据权利要求5所述的方法,其特征在于,多进程通信系统中的其他进程检测到有进程退出后,所执行的步骤还包括:
在争夺动态区的访问权限失败后,等待获取动态区的访问权限,待获得动态区的访问权限后,从动态区获取新的临时服务进程的地址以及该新的临时服务进程的互斥,然后释放动态区的访问权限。
8.根据权利要求5所述的方法,其特征在于,在所述判断退出的进程是否为临时服务进程之前进一步包括:所述多进程通信系统中的其他进程删除退出的进程在本进程中的记录。
9.根据权利要求5所述的方法,其特征在于,所述判断退出的进程是否为临时服务进程包括:判断退出的进程的互斥是否与动态区中的临时服务进程的互斥相同,如果相同,则退出进程是临时服务进程。
10.根据权利要求5所述的方法,其特征在于,所述多进程通信系统中的其他进程检测到有进程退出包括:
多进程通信系统中的其他进程通过应用程序编程接口API等待 互斥的方式,检测出有进程退出。 
CN2011101049666A 2011-04-26 2011-04-26 一种多进程间的通信方法 Active CN102147751B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2011101049666A CN102147751B (zh) 2011-04-26 2011-04-26 一种多进程间的通信方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2011101049666A CN102147751B (zh) 2011-04-26 2011-04-26 一种多进程间的通信方法

Publications (2)

Publication Number Publication Date
CN102147751A CN102147751A (zh) 2011-08-10
CN102147751B true CN102147751B (zh) 2012-11-21

Family

ID=44422024

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2011101049666A Active CN102147751B (zh) 2011-04-26 2011-04-26 一种多进程间的通信方法

Country Status (1)

Country Link
CN (1) CN102147751B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108874564A (zh) * 2018-06-29 2018-11-23 武汉斗鱼网络科技有限公司 一种进程间通信方法、电子设备及可读存储介质

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102591722B (zh) * 2011-12-31 2014-06-25 龙芯中科技术有限公司 片上网络多核处理器多线程的资源分配处理方法和系统
CN102707932B (zh) * 2012-05-16 2013-07-24 清华大学 一种用于地球系统模式的并行耦合方法
CN104834572B (zh) * 2015-05-12 2019-02-15 四川九洲空管科技有限责任公司 综合化机载防撞系统中各独立子系统之间的数据通信方法
CN106326020B (zh) * 2016-08-24 2019-06-18 浙江浙大中控信息技术有限公司 应用于静态集群上的分布式通信系统及方法
CN108829526B (zh) * 2018-05-08 2021-02-02 武汉斗鱼网络科技有限公司 一种进程间通信方法、电子设备及可读存储介质
CN112445628B (zh) * 2019-09-03 2023-10-24 腾讯科技(深圳)有限公司 进程间资源共享方法、装置与电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1859327A (zh) * 2006-02-09 2006-11-08 华为技术有限公司 一种消息传递的方法、装置和系统
CN101299677A (zh) * 2008-04-30 2008-11-05 中兴通讯股份有限公司 一种多进程共享同一服务进程的方法
CN101382953A (zh) * 2008-09-19 2009-03-11 中兴通讯股份有限公司 在用户空间访问文件系统的接口系统与文件读、写方法
CN101448018A (zh) * 2008-12-26 2009-06-03 中兴通讯股份有限公司 进程间通信方法和装置
US7552440B1 (en) * 1999-09-28 2009-06-23 Rockwell Automation Technologies, Inc. Process communication multiplexer

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2167632A1 (en) * 1995-01-23 1996-07-24 Leonard R. Fishler Apparatus and method for efficient transfer of data and events between processes and between processes and drivers in a parallel, fault tolerant message based operating system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7552440B1 (en) * 1999-09-28 2009-06-23 Rockwell Automation Technologies, Inc. Process communication multiplexer
CN1859327A (zh) * 2006-02-09 2006-11-08 华为技术有限公司 一种消息传递的方法、装置和系统
CN101299677A (zh) * 2008-04-30 2008-11-05 中兴通讯股份有限公司 一种多进程共享同一服务进程的方法
CN101382953A (zh) * 2008-09-19 2009-03-11 中兴通讯股份有限公司 在用户空间访问文件系统的接口系统与文件读、写方法
CN101448018A (zh) * 2008-12-26 2009-06-03 中兴通讯股份有限公司 进程间通信方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108874564A (zh) * 2018-06-29 2018-11-23 武汉斗鱼网络科技有限公司 一种进程间通信方法、电子设备及可读存储介质
CN108874564B (zh) * 2018-06-29 2021-11-26 武汉斗鱼网络科技有限公司 一种进程间通信方法、电子设备及可读存储介质

Also Published As

Publication number Publication date
CN102147751A (zh) 2011-08-10

Similar Documents

Publication Publication Date Title
CN102147751B (zh) 一种多进程间的通信方法
TWI631472B (zh) 分散式作業系統
US20190155696A1 (en) Method and system for implementing consistency groups with virtual machines
JP6170512B2 (ja) ストレージプール内のディスク所有権の調停
US10678663B1 (en) Synchronizing storage devices outside of disabled write windows
US8656412B2 (en) Pipeline across isolated computing environments
CN103458036B (zh) 一种集群文件系统的访问装置和方法
US10067692B2 (en) Method and apparatus for backing up and restoring cross-virtual machine application
US10609141B2 (en) Methods and apparatuses for cluster switching
JP6195834B2 (ja) トランザクショナルミドルウェアマシン環境においてトランザクションレコードを永続化するためのシステムおよび方法
US9753939B2 (en) Data synchronization method and data synchronization system for multi-level associative storage architecture, and storage medium
US20150254113A1 (en) Lock Spin Wait Operation for Multi-Threaded Applications in a Multi-Core Computing Environment
BR112017006639B1 (pt) Método, aparelho e sistema de gravação de dados
CN103198122B (zh) 重启内存数据库的方法和装置
CN106127036A (zh) 持续性和弹性的工作者进程
US10261898B1 (en) Concurrent marking of location and shape changing objects
JP2021166079A (ja) アプリケーション移行のためのシステム及び方法
US8819372B2 (en) Preventing data loss during reboot and logical storage resource management device
WO2016106756A1 (zh) 一种容灾方法、系统和装置
WO2015112094A2 (en) Method of file system design and failure recovery with non-volatile memory
JP2017033113A (ja) システム、情報処理装置、および情報処理方法
CN110309224B (zh) 一种数据复制方法及装置
US20080082533A1 (en) Persistent locks/resources for concurrency control
US10691557B1 (en) Backup file recovery from multiple data sources
EP3933588B1 (en) Cross-system process control framework

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP02 Change in the address of a patent holder
CP02 Change in the address of a patent holder

Address after: Room 810, 8 / F, 34 Haidian Street, Haidian District, Beijing 100080

Patentee after: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd.

Address before: 100089 Beijing city Haidian District wanquanzhuang Road No. 28 Wanliu new building A block 5 layer

Patentee before: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd.