[发明专利]一种基于单进单出无锁队列的随机取出对象的方法有效

专利信息
申请号: 202110294432.8 申请日: 2021-03-19
公开(公告)号: CN113176896B 公开(公告)日: 2022-12-13
发明(设计)人: 陈稳 申请(专利权)人: 中盈优创资讯科技有限公司
主分类号: G06F9/38 分类号: G06F9/38
代理公司: 上海嘉蓝专利代理事务所(普通合伙) 31407 代理人: 金波
地址: 200000 上海市嘉定区安*** 国省代码: 上海;31
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 基于 单进单出无锁 队列 随机 取出 对象 方法
【说明书】:

发明公开一种基于单进单出无锁队列的随机取出对象的方法,其中,该方法包括:对size大小的对象池进行内存布局;将对象指针数组p[size]划分为使用区间[HEAD,TAIL]和空闲区间;消费者线程取出p[N]指向的对象(N∈[HEAD,TAIL]),并且在使用完毕之后释放。该方法相比于现有单进单出无锁队列,它多具备了“支持异步无锁/同步随机取出”、“已分配区间即队列”和“空闲对象无须查找”三个特点,将现有单进单出无锁队列的应用场景扩展到“网络会话管理”这类需求,并且还具有性能优势。

技术领域

本发明涉及单进单出无锁队列领域,尤其是一种基于单进单出无锁队列的随机取出对象的方法。

背景技术

单进单出无锁队列,是一种已经存在的算法,支持单生产者线程向HEAD位置添加对象,单消费者线程从TAIL位置取出对象,如图1所示。

但是,现有单进单出无锁队列,同时也是FIFO(first in first out)队列,即消费者线程只可以固定从TAIL位置取出对象,不可以越过TAIL位置,在[HEAD,TAIL)区间执行取出对象操作,如图2所示。

发明内容

为克服现有单进单出无锁队列存在的上述问题,本发明提供一种基于单进单出无锁队列的随机取出对象的方法,可以从[HEAD,TAIL]区间随机取出对象。

为实现上述目的,本发明采用下述技术方案:

在本发明一实施例中,提出了一种基于单进单出无锁队列的随机取出对象的方法,该方法包括:

对size大小的对象池进行内存布局;

将对象指针数组p[size]划分为使用区间[HEAD,TAIL]和空闲区间;

消费者线程取出p[N]指向的对象(N∈[HEAD,TAIL]),并且在使用完毕之后释放。

进一步地,对size大小的对象池进行内存布局,包括:

对象池前面部分为对象指针数组p[size],后面部分为对象实体数组obj[size];

设置对象指针数组p[size]中的各个指针指向;

设置对象实体数组obj[size]中每个对象实体携带的隐式尾部pos指向;

将对象指针数组p[size]实现为无锁环形队列。

进一步地,设置对象指针数组p[size]中的各个指针指向,包括:

设置对象指针数组p[size]中的各个指针,指向对象实体数组obj[size]中对应下标处的对象。

进一步地,设置对象实体数组obj[size]中每个对象实体携带的隐式尾部pos指向,包括:

让对象实体数组obj[size]中每个对象实体携带一个隐式尾部pos,用于存储指向该对象的指针,在对象指针数组p[size]中的下标值,使得对象池刚建立时,形成对象指针与对象实体的相互映射关系。

进一步地,将对象指针数组p[size]划分为使用区间[HEAD,TAIL]和空闲区间,包括:

[HEAD,TAIL]为使用区间,指向生产者线程添加且未被消费者线程取出的对象,其余部分为空闲区间,指向空闲对象。

进一步地,消费者线程取出p[N]指向的对象(N∈[HEAD,TAIL]),并且在使用完毕之后释放,包括:

执行释放操作前的使用区间状态;

交换p[N]与p[TAIL]的值;

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中盈优创资讯科技有限公司,未经中盈优创资讯科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/202110294432.8/2.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top