[发明专利]一种基于单进单出无锁队列的随机取出对象的方法有效
申请号: | 202110294432.8 | 申请日: | 2021-03-19 |
公开(公告)号: | CN113176896B | 公开(公告)日: | 2022-12-13 |
发明(设计)人: | 陈稳 | 申请(专利权)人: | 中盈优创资讯科技有限公司 |
主分类号: | G06F9/38 | 分类号: | G06F9/38 |
代理公司: | 上海嘉蓝专利代理事务所(普通合伙) 31407 | 代理人: | 金波 |
地址: | 200000 上海市嘉定区安*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 单进单出无锁 队列 随机 取出 对象 方法 | ||
1.一种基于单进单出无锁队列的随机取出对象的方法,其特征在于,该方法包括:
对size大小的对象池进行内存布局,包括:
对象池前面部分为对象指针数组p[size],后面部分为对象实体数组obj[size];
设置对象指针数组p[size]中的各个指针指向,包括:
设置对象指针数组p[size]中的各个指针,指向对象实体数组obj[size]中对应下标处的对象;
设置对象实体数组obj[size]中每个对象实体携带的隐式尾部pos指向,包括:
让对象实体数组obj[size]中每个对象实体携带一个隐式尾部pos,用于存储指向该对象的指针,在对象指针数组p[size]中的下标值,使得对象池刚建立时,形成对象指针与对象实体的相互映射关系;
将对象指针数组p[size]实现为无锁环形队列;
将对象指针数组p[size]划分为使用区间[HEAD,TAIL]和空闲区间;
消费者线程取出p[N]指向的对象N∈[HEAD,TAIL],并且在使用完毕之后释放,包括:
执行释放操作前的使用区间状态;
交换p[N]与p[TAIL]的值;
交换p[N]此时指向的对象obj[M]与p[TAIL]此时指向的对象obj[T]对象的pos值,包括:
交换p[N]此时指向的对象obj[M]与p[TAIL]此时指向的对象obj[T]的pos值,最终形成p[N]与obj[T],以及p[TAIL]与obj[M]的相互映射关系,将释放p[N]操作转换为释放p[TAIL]操作。
2.根据权利要求1所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,将对象指针数组p[size]划分为使用区间[HEAD,TAIL]和空闲区间,包括:
[HEAD,TAIL]为使用区间,指向生产者线程添加且未被消费者线程取出的对象,其余部分为空闲区间,指向空闲对象。
3.根据权利要求1所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,执行释放操作前的使用区间状态,包括:
将p[N]此时指向的对象记作obj[M],将p[TAIL]此时指向的对象记作obj[T],此时消费者线程此时只有p[N]的值,没有p[N]本身的地址,通过obj[M].pos即可获取N值。
4.根据权利要求1所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,交换p[N]与p[TAIL]的值,包括:
交换p[N]与p[TAIL]的值,使p[TAIL]指向期望释放的对象obj[M],p[N]指向p[TAIL]原本指向的对象obj[T]。
5.根据权利要求1所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,所述对象实体数组obj[size]中每个对象实体与对象指针数组p[size]中的各个指针一一映射,并且对象指针数组p[size]的使用区间是连续的。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中盈优创资讯科技有限公司,未经中盈优创资讯科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110294432.8/1.html,转载请声明来源钻瓜专利网。