[发明专利]一种多进程使用共享内存进行通信的方法无效
申请号: | 201110446780.9 | 申请日: | 2011-12-28 |
公开(公告)号: | CN102541663A | 公开(公告)日: | 2012-07-04 |
发明(设计)人: | 庄建波 | 申请(专利权)人: | 创新科软件技术(深圳)有限公司;创新科存储技术有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54 |
代理公司: | 北京德琦知识产权代理有限公司 11018 | 代理人: | 牛峥;王丽琴 |
地址: | 518057 广东省深圳市南山区*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 进程 使用 共享 内存 进行 通信 方法 | ||
技术领域
本发明涉及计算机技术领域,尤其涉及一种多进程使用共享内存进行通信的方法。
背景技术
共享内存指在多进程的计算机系统中,可以被不同进程访问的内存。任何一个进程缓存的数据被更新后,由于其他进程也可能要存取,共享内存就需要立即更新,否则不同的进程可能用到不同的数据。共享内存是Unix下的多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。
当数据成功导入一块共享内存后,它只是相当于一个字符串指针来指向一块内存,在当前进程下用户可以随意的访问。共享内存是一种自由的进程通讯机制,所有的进程都可以访问共享内存,当多个进程同时访问同一个共享内存时,由于没有锁等限制机制,会出现竞争,同时操作,出现数据错误,例如两个进程同时写数据,或者一个进程写完数据,另外一个进程还没读完数据,其他进程又开始写数据等等错误。因此,多进程使用共享内存进行通信时,会存在共享内存资源的竞争,这样容易出现读写数据错误。
发明内容
本发明提供了一种多进程使用共享内存进行通信的方法,可以避免出现读写错误。
本发明实施例提供的一种多进程使用共享内存进行写数据的方法,包括如下步骤:
A、在系统内存中为每个进程创建1个共享内存,并为每个共享内存创建一个位图,位图表示该共享内存是否为空闲状态;
B、第一进程向第二进程发送数据时,先获取第二进程共享内存的位图位,判断所述位图位表示是否为空闲,若是执行步骤D,否则执行步骤C;
C、第一进程进入等待状态,并返回步骤B;
D、第一进程将数据写入第二进程共享内存,置第二进程对应位图位为有数据。
较佳地,步骤D之后进一步包括:
第二进程获取本进程共享内存的位图位,若所述位图位表示有数据,将数据从共享内存中读出来;
第二进程将本进程共享内存对应的位图位设置为空闲。
本发明实施例还提出一种多进程使用共享内存进行读数据的方法,包括如下步骤:
在系统内存中为每个进程创建1个共享内存,并为每个共享内存创建一个位图,位图表示该共享内存是否为空闲状态;
第二进程获取本进程共享内存的位图位,若所述位图位表示有数据,将数据从共享内存中读出来;
第二进程将本进程共享内存对应的位图位设置为空闲。
从以上技术方案可以看出,使用位图信号量来控制共享内存的使用,使同一时刻只有一个进程对共享内存进行读操作或者写操作。
附图说明
图1为本发明实施例提供的一种多进程使用共享内存进行写数据的方法流程示意图;
图2为本发明实施例提供的一种多进程使用共享内存进行读数据的方法流程示意图。
具体实施方式
本发明的目标解决在多进程使用共享内存进行通讯时,使用位图(bitmap)信号量来控制共享内存的使用,使同一时刻只有一个进程对共享内存进行读写操作,保证数据的正确性,完整性,一致性。共享内存能够传送数据,但不能保证资源竞争,信号量能够保证竞争,但不能传送数据,两者结合起来,正好各自弥补,并且能够提高性能。
本发明实施例提供的一种多进程使用共享内存进行通信的方法,其中写数据流程如图1所示,包括如下步骤:
步骤101:在系统内存中为每个进程创建1个共享内存,并为每个共享内存创建一个位图(bitmap)位(该位图占用一个比特)。位图表示该共享内存是否为空闲状态。例如位图的值为0表示空闲,为1表示有数据;或者位图的值为1表示空闲,为0表示有数据。
步骤102:任一进程(称为第一进程)向其他进程(称为第二进程)发送数据时,先获取第二进程共享内存的位图位。
步骤103:判断所述位图位表示是否为空闲,若是,执行步骤104,否则执行步骤105。
步骤104:第一进程将数据写入第二进程共享内存,置第二进程对应位图位为有数据。
步骤105:若位图位表示有数据时,则第一进程进入等待状态,并返回步骤103。
读数据流程如图2所示,包括如下步骤:
步骤201:在系统内存中为每个进程创建1个共享内存,并为每个共享内存创建一个位图(bitmap)位(该位图占用一个比特)。位图表示该共享内存是否为空闲状态。例如位图的值为0表示空闲,为1表示有数据;或者位图的值为1表示空闲,为0表示有数据。
步骤202:任一进程获取本进程共享内存的位图位,若所述位图位表示有数据,将数据从共享内存中读出来。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于创新科软件技术(深圳)有限公司;创新科存储技术有限公司,未经创新科软件技术(深圳)有限公司;创新科存储技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110446780.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:用于光学元件检测的改进水平基座结构
- 下一篇:自动安平水准仪