[发明专利]一种多核环境下实现免锁队列的方法和设备在审
申请号: | 201510486082.X | 申请日: | 2015-08-10 |
公开(公告)号: | CN105045632A | 公开(公告)日: | 2015-11-11 |
发明(设计)人: | 赵剑川;贾克明 | 申请(专利权)人: | 京信通信技术(广州)有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445 |
代理公司: | 北京同达信恒知识产权代理有限公司 11291 | 代理人: | 朱佳 |
地址: | 510663 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 多核 环境 实现 队列 方法 设备 | ||
1.一种多核环境下实现免锁队列的方法,其特征在于,包括:
确定一个环形队列,所述环形队列的存储结构采用数组形式存储,所述环形队列包括生产者子队列和消费者子队列;
当生产者有M个数据入队时,获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针,从所述生产者子队列初始头指针开始依次将M个数据加入到所述环形队列中,获取所述生产者子队列的尾指针作为生产者子队列初始尾指针,确定所述生产者子队列初始尾指针等于所述生产者子队列初始头指针时,将所述生产者子队列初始尾指针加M作为新的生产者子队列尾指针,入队完成,其中M为正整数;
当消费者有N个数据出队时,获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针,从所述消费者子队列初始头指针开始依次将N个数据从所述环形队列中清除,获取所述消费者子队列的尾指针作为消费者子队列初始尾指针,确定所述消费者子队列初始尾指针等于所述消费者子队列初始头指针时,将所述消费者子队列初始尾指针加N作为新的消费者子队列尾指针,出队完成,其中N为正整数。
2.如权利要求1所述的方法,其特征在于,所述生产者子队列与所述消费者子队列均可以占据所述环形队列的任何存储空间,且针对所述生产者子队列和所述消费者子队列的操作方向相同。
3.如权利要求1所述的方法,其特征在于,进一步包括:
在系统初始化阶段,将所述生产者子队列的头指针、所述生产者子队列的尾指针、所述消费者子队列的头指针和所述消费者子队列的尾指针均设置为所述环形队列对应的数组结构的第一个元素。
4.如权利要求1所述的方法,其特征在于,确定所述环形队列未满,具体包括:
当生产者有M个数据入队时,判断所述消费者子队列第一尾指针是否等于所述生产者子队列初始头指针加1,若是,则判定所述环形队列已满,不能执行生产者的入队操作;否则,判定所述环形队列未满,继续执行生产者的入队操作。
5.如权利要求1-4任一项所述的方法,其特征在于,当生产者有M个数据入队时,在确定所述环形队列未满之后,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针之前,进一步包括:
获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,再次获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,执行后续操作。
6.如权利要求1所述的方法,其特征在于,确定所述环形队列未空,具体包括:
当消费者有N个数据出队时,判断当前生产者子队列的尾指针是否等于所述消费者子队列初始头指针,若是,则判定所述环形队列已空,不能执行消费者的出队操作;否则,判定所述环形队列未空,继续执行消费者的出队操作。
7.如权利要求1、2、3或6所述的方法,其特征在于,当消费者有N个数据出队时,确定所述环形队列未空之后,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针之前,进一步包括:
获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,再次获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,执行后续操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于京信通信技术(广州)有限公司,未经京信通信技术(广州)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510486082.X/1.html,转载请声明来源钻瓜专利网。