[发明专利]基于反转单链表的锁无关消息队列实现方法有效
申请号: | 201310102077.5 | 申请日: | 2013-03-27 |
公开(公告)号: | CN103176837A | 公开(公告)日: | 2013-06-26 |
发明(设计)人: | 周克利;唐杰;武港山 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F9/46 | 分类号: | G06F9/46 |
代理公司: | 南京天翼专利代理有限责任公司 32112 | 代理人: | 黄明哲 |
地址: | 210093 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 基于反转单链表的锁无关消息队列实现方法,用于2线程服务器架构,包括a)基于反转单链表的锁无关消息队列的数据结构,b)基于所述数据结构实现的两个锁无关方法的操作函数:Push函数和Pop函数;2线程间通过所述锁无关消息队列,在所述锁无关方法下进行通讯。本发明在2个线程的服务器架构上,创新性的提出了基于反转单链表的锁无关消息队列的方法,并且没用使用任何昂贵的原子指令,将计算量降低到最低,使得执行效率非常高,通过实验,本发明提出的基于反转单链表的锁无关消息队列在2个线程的服务器架构下,执行速度是传统的基于锁的消息队列的数倍。 | ||
搜索关键词: | 基于 反转 单链表 无关 消息 队列 实现 方法 | ||
【主权项】:
基于反转单链表的锁无关消息队列实现方法,用于2线程服务器架构,其特征包括:a)基于反转单链表的锁无关消息队列的数据结构,b)基于所述数据结构实现的两个锁无关方法的操作函数:Push函数和Pop函数;2线程间通过所述锁无关消息队列,在所述锁无关方法下进行通讯,其中:1)、反转单链表的数据结构为:struct LisElement{ struct LisElement*prev; };反转单链表中,每个链表元素只有一个指向其前一项链表元素的指针prev;2)基于所述反转单链表的锁无关消息队列的数据结构为:2a)设有一个指向反转单链表的链表头的head指针;2b)设有一个指向反转单链表的链表尾的tail指针;2c)设有一个指向上次Pop出去元素项的last指针;3)基于所述锁无关消息队列的Push函数,包括以下几个要素:3a)head指针只在最开始时为NULL,此时tail指针也为NULL,这种情况下,在Push第一个消息Push结束前,Pop函数总是返回NULL;3b)在Push第一个消息时,对tail的赋值要在Push函数返回之前最后一个执行,使得Pop函数在Push函数结束前,总是返回NULL;3c)每个新来的消息,都分配一个struct ListElement数据结构,即反转单链表的数据结构,并将其赋值;3d)对于每一个消息项,Push函数在将其链入消息队列之前对其执行写操作,当其在消息队列里以后,Push函数不对其进行任何修改;3e)只有Push函数永远不会被访问的元素项,才能由Pop释放内存;3f)刚刚Pop出去的元素项不会被立即释放,而是存在last指针里,只有再次Pop出其他元素项时,last指针当前指向的元素项才会被释放;4)基于所述锁无关消息队列的Pop函数,分为以下情况:4a)如果tail==NULL&&last==NULL,那么消息队列处于未初始化状态,Pop返回NULL;4b)如果tail==NULL&&last!=NULL,那么tail=last→prev,如果这时候tail还为NULL,说明消息队列为空,Pop返回NULL;4c)如果tail!=NULL,那么tail指向的是一个正确的消息项,需要更新last指针, 如果last指针之前不为NULL,则将其内存释放,让last指向最新释放的消息项,并将tail值更新为tail=tail→prev;在2线程的服务器架构下,其中一个线程A为收发网络消息数据包的通讯线程,另一个线程B为处理服务器内部逻辑的主线程,这2个线程间通过所述锁无关消息队列和操作函数进行通讯:a)定义一个基于反转单链表的锁无关消息队列:MsgQueue;b)线程A从网络收到消息数据包Packet,执行MsgQueue.Push(Packet),即将收到的消息数据包通过Push函数添加进锁无关消息队列里;c)线程B每次要处理服务器内部逻辑之前,都尝试通过pop函数从锁无关消息队列MsgQueue中读取新的消息:Packet=MsgQueue.Pop()。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201310102077.5/,转载请声明来源钻瓜专利网。
- 上一篇:变电站高压室通风控制装置
- 下一篇:整体式旋片真空泵