[发明专利]一种基于共享内存的消息传递方法无效
申请号: | 200910044403.5 | 申请日: | 2009-09-25 |
公开(公告)号: | CN101763289A | 公开(公告)日: | 2010-06-30 |
发明(设计)人: | 廖湘科;刘晓建;戴华东;任怡;谭郁松;吴庆波;易晓东;张卫华;孔金珠;颜跃进;董攀;邵立松;李姗姗 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F9/54 | 分类号: | G06F9/54;G06F9/38 |
代理公司: | 国防科技大学专利服务中心 43202 | 代理人: | 郭敏 |
地址: | 410073 *** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于共享内存的消息传递方法,目的是实现多生产者多消费者情形下生产者和消费者之间高并行消息通信。技术方案是先在共享内存中创建并初始化消息槽数组,分配两个变量head和tail;生产者访问消息槽数组时采用比较交换原子指令CAS保证写写冲突不可能发生,消费者访问消息槽数组时采用比较交换原子指令CAS保证多次读取不可能发生。采用本发明可以实现任意场景下多个生产者和多个消费者并行进行消息通信,对于可以使用锁的场景而言,采用本发明的系统性能远优于使用锁的系统性能。 | ||
搜索关键词: | 一种 基于 共享 内存 消息 传递 方法 | ||
【主权项】:
一种基于共享内存的消息传递方法,其特征在于包括以下步骤:第一步,在共享内存中创建并初始化消息缓冲区——消息槽数组,消息槽数组每个元素包含一个消息槽及该消息槽对应的状态,每个消息槽处于以下三种状态之一:“有消息”,“无消息”、“使用中”;初始化时所有的消息槽都设置成“无消息”状态,当消息槽被生产者获取后,生产者将消息槽改为“使用中”状态;当生产者将已生产的消息放入消息槽后,它将消息槽状态由“使用中”修改为“有消息”;当处于“有消息”状态的消息槽被消费者获得后,消息槽的状态被更新为“使用中”;当消费者获得了完整消息之后,它将消息槽的状态由“使用中”更新为“无消息”;同时,在共享内存中分配两个变量head和tail,并令head=tail=0,这两个变量只能按照递增的方式进行改变,它们的取值被称为版本号;同时,head/tail也是消息槽数组的索引,head指向的编号为head%C的消息槽,tail指向编号为tail%C的消息槽,其中%为求余数运算;第二步,第x个生产者Px采用以下方法访问消息槽数组,以插入其生产出的消息,x为小于生产者个数M的自然数:2.1创建生产者Px的私有变量cached_tailx;2.2将当前的tail值缓存到Px的私有变量cached_tailx中;2.3判断cached_tailx是否与head+C相等,若相等则执行用户自定义的“消息缓冲区满”处理流程,然后重新执行步骤2.3,若不相等则转2.4;2.4比较交换原子指令CAS(&tail,cached_tailx,cached_tailx+1),若指令失败则转步骤2.2,否则执行2.5;2.5使用CAS(&stat,无消息,使用中)操作修改cached_tailx指向的消息槽状态,尝试将cached_tailx指向的消息槽的状态设置成“使用中”状态,若操作失败转2.2,否则执行2.6,其中stat为cached_tailx指向的消息槽的状态变量;2.6将消息写入cached_tailx指向的消息槽;2.7释放消息槽:将cached_tailx指向的消息槽的状态由“使用中”更新为“有消息”,释放本生产者私有的临时变量cached_tailx;第三步,消费者Cx采用以下方法访问消息槽数组,以获取消息:3.1创建生产者Cx的私有变量cached_headx;3.2将当前的head值缓存到cached_headx中;3.3判断cached_headx是否与tail相等,若相等则执行用户自定义的“消息缓冲区空”处理流程,转步骤3.2,若不相等则转3.4;3.4执行CAS(&head,cached_headx,cached_headx+1)指令,若指令失败则转步骤3.2,否则执行3.5;3.5使用CAS(&statx,有消息,使用中)操作修改cached_headx指向的消息槽状态,尝试将cached_headx指向的消息槽的状态设置成“使用中”状态;若操作失败转3.2,否则执行3.6,其中statx为cached_headx指向的消息槽的状态变量;3.6读取cached_headx指向的消息槽中的消息;3.7释放消息槽:将cached_headx指向的消息槽状态由“使用中”更新为“无消息”,释放本消费者私有的临时变量cached_headx。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/200910044403.5/,转载请声明来源钻瓜专利网。