专利名称:一种多进程使用共享内存进行通信的方法
技术领域:
本发明涉及计算机技术领域,尤其涉及一种多进程使用共享内存进行通信的方法。
背景技术:
共享内存指在多进程的计算机系统中,可以被不同进程访问的内存。任何一个进程缓存的数据被更新后,由于其他进程也可能要存取,共享内存就需要立即更新,否则不同的进程可能用到不同的数据。共享内存是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 任一进程获取本进程共享内存的位图位,若所述位图位表示有数据,将数据从共享内存中读出来。
步骤203 所述进程将本进程共享内存对应的位图位设置为空闲。
所述读数据流程和写数据流程相结合,可以实现多进程通过bitmap位这一信号量的判断进行进程间通信,简单,快捷,性能更好。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种多进程使用共享内存进行写数据的方法,其特征在于,包括如下步骤A、在系统内存中为每个进程创建1个共享内存,并为每个共享内存创建一个位图,位图表示该共享内存是否为空闲状态;B、第一进程向第二进程发送数据时,先获取第二进程共享内存的位图位,判断所述位图位表示是否为空闲,若是执行步骤D,否则执行步骤C ;C、第一进程进入等待状态,并返回步骤B;D、第一进程将数据写入第二进程共享内存,置第二进程对应位图位为有数据。
2.根据权利要求1所述的方法,其特征在于,步骤D之后进一步包括第二进程获取本进程共享内存的位图位,若所述位图位表示有数据,将数据从共享内存中读出来;第二进程将本进程共享内存对应的位图位设置为空闲。
3.一种多进程使用共享内存进行读数据的方法,其特征在于,包括如下步骤在系统内存中为每个进程创建1个共享内存,并为每个共享内存创建一个位图,位图表示该共享内存是否为空闲状态;第二进程获取本进程共享内存的位图位,若所述位图位表示有数据,将数据从共享内存中读出来;第二进程将本进程共享内存对应的位图位设置为空闲。
全文摘要
本发明提供了一种多进程使用共享内存进行写数据的方法,包括如下步骤A、在系统内存中为每个进程创建1个共享内存,并为每个共享内存创建一个位图,位图表示该共享内存是否为空闲状态;B、第一进程向第二进程发送数据时,先获取第二进程共享内存的位图位,判断所述位图位表示是否为空闲,若是执行步骤D,否则执行步骤C;C、第一进程进入等待状态,并返回步骤B;D、第一进程将数据写入第二进程共享内存,置第二进程对应位图位为有数据。本发明提供了一种多进程使用共享内存进行读数据的方法。
文档编号G06F9/54GK102541663SQ201110446780
公开日2012年7月4日 申请日期2011年12月28日 优先权日2011年12月28日
发明者庄建波 申请人:创新科存储技术有限公司, 创新科软件技术(深圳)有限公司