[发明专利]一种基于原子操作的信号量链表式堆栈方法在审

专利信息
申请号: 201610096102.7 申请日: 2016-02-23
公开(公告)号: CN107102842A 公开(公告)日: 2017-08-29
发明(设计)人: 龙恢;管志坚 申请(专利权)人: 长沙新弘软件有限公司
主分类号: G06F7/78 分类号: G06F7/78
代理公司: 长沙市标致专利代理事务所(普通合伙)43218 代理人: 徐邵华
地址: 410000 湖南省长沙市麓*** 国省代码: 湖南;43
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 基于 原子 操作 信号量 链表式 堆栈 方法
【说明书】:

技术领域

发明涉及计算机系统软件编程领域,特别是一种基于原子操作的信号量链表式堆栈方法。

背景技术

在计算机领域里信号量是用来实现进程间同步的机制。信号量本身是一个整数,信号量大于等于零表示可供并发进程使用的资源实体数,信号量小于零则表示正在等待使用临界区的进程数。例如在PV原语中,P原语信号量的操作是:若信号量减1后仍大于或等于零,则进程继续执行,若信号量减1后小于零,则该进程被阻塞;V原语信号量的操作是:若信号量加1后大于零,则进程继续执行,若信号量加1后仍小于或等于零,则唤醒一个在该信号量上阻塞的进程。

发明内容

本发明提出一种基于原子比较并交换(CAS)操作的带信号计数的链表式堆栈方法,该方法的堆栈由栈顶指针、信号计数、出栈计数和结点构成。信号计数和出栈计数都是整型值,这里的结点指的是计算机内存中的一块数据,指针是指向这块数据的地址,指针本身也是存放在内存空间里的数据。每个结点包含一个链接指针,结点与结点之间通过链接指针连接起来,栈顶指针指向第一个结点即为栈顶结点,第一个结点的链接指针指向第二个结点,最后一个结点的链接指针为空。和常规的链表式堆栈一样具有入栈(Push)和出栈(Pop)的操作,不同的是进行入栈操作时对信号计数值减1,若减1后该信号计数大于或等于零,则不能将新结点放入该堆栈中,若减1后该信号计数小于零,则能将新结点放入该堆栈,使用(CAS)原子操作更新栈顶指针和相关计数值。进行出栈操作时对信号计数值加1,若加1后该信号计数大于零,则出栈操作失败返回空指针,若加1后该信号计数小于或等于零,则取出当前栈顶结点,并使用(CAS)原子操作更新栈顶指针指向当前栈顶结点链接的下一个结点,更新过程中同时将出栈计数加1以防止(CAS)操作过程中和原值比较时出现的ABA问题。

一种基于原子操作的信号量链表式堆栈方法,包括入栈操作和出栈操作,该方法的堆栈由栈顶指针、信号计数、出栈计数和结点构成;每个结点包含一个链接指针,结点与结点之间通过链接指针连接起来,栈顶指针指向第一个结点即为栈顶结点,第一个结点的链接指针指向第二个结点,最后一个结点的链接指针为空;进行入栈操作时包括以下步骤:第一步:取原栈顶结点指针、原信号计数值、原出栈计数值,第二步:使临时信号计数值等于原信号计数值,使临时出栈计数值等于原出栈计数值,使临时栈顶结点指针等于原栈顶结点指针;第三步:临时信号计数值减1并进行判断,若减1后小于零,则进入第四步,若减1后大于或等于零,则直接进入第五步;第四步:将入栈的新结点的链接指针指向原栈顶结点,并将临时栈顶结点指针指向新结点;第五步:使用原子比较并交换操作尝试同时将栈顶指针、信号计数、出栈计数跟原值进行比较并原子化的替换为临时栈顶结点指针、临时信号计数、临时出栈计数的值,第六步:如果替换操作成功,则入栈操作结束,如果替换操作失败则返回第一步,重复上述步骤直至成功。

本发明进一步的技术方案是:一种基于原子操作的信号量链表式堆栈方法,出栈操作时包括以下步骤:第一步:对信号计数进行原子加1操作,第二步:进行判断,若加1后信号计数大于零,则表示出栈失败返回空指针,出栈操作结束,若加1后信号计数小于或等于零,则进入下一步;第三步:取原栈顶结点指针、原信号计数值、原出栈计数值;第四步:使临时信号计数值等于原信号计数值,使临时出栈计数值等于原出栈计数值加1,使临时栈顶结点指针的值等于原栈顶结点的链接指针的值;第五步:使用原子比较并交换操作尝试同时将栈顶指针、信号计数、出栈计数跟原值进行比较并原子化的替换为临时栈顶结点指针、临时信号计数、临时出栈计数的值,第六步:进行判断,如果替换操作失败则返回第三步,并重复第三步、第四步、第五步和第六步,如果替换操作成功,将原栈顶结点指针返回,出栈操作结束。

本发明与现有的链表式堆栈相比具有如下特点:进行入栈操作时对信号计数值减1,若减1后该信号计数大于或等于零,则不能将新结点放入该堆栈中,若减1后该信号计数小于零,则能将新结点放入该堆栈,使用(CAS)原子操作更新栈顶指针和相关计数值。进行出栈操作时对信号计数值加1,若加1后该信号计数大于零,则出栈操作失败返回空指针,若加1后该信号计数小于或等于零,则取出当前栈顶结点,并使用(CAS)原子操作更新栈顶指针指向当前栈顶结点链接的下一个结点,更新过程中同时将出栈计数加1以防止(CAS)操作过程中和原值比较时出现的ABA问题。

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

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

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

×

专利文献下载

说明:

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

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

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

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

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

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

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

钻瓜专利网在线咨询

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

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