[发明专利]一种获取自旋锁的方法及装置有效
申请号: | 201410109467.X | 申请日: | 2014-03-21 |
公开(公告)号: | CN104932933B | 公开(公告)日: | 2018-11-13 |
发明(设计)人: | 张文涛;徐彩虹;赵家伟 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46 |
代理公司: | 北京中博世达专利商标代理有限公司 11274 | 代理人: | 申健 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 获取 自旋 方法 装置 | ||
本发明的实施例提供一种获取自旋锁的方法及装置,涉及计算机技术领域,能够降低由于多个任务竞争共享资源而造成的系统的性能损耗,从而提高系统的性能。该方法可以包括:接收请求获取自旋锁的任务;将该任务保存在排队队列中;根据该任务在排队队列中的位置,确定该任务的自旋等待时间,以使得该任务在该自旋等待时间结束时,尝试获取自旋锁,其中,该任务在排队队列中的位置用于表征该任务保存至排队队列中的先后顺序,先保存至排队队列中的任务的位置在后保存至排队队列中的任务的位置之前。
技术领域
本发明涉及计算机技术领域,尤其涉及一种获取自旋锁的方法及装置。
背景技术
随着CPU多核及并行技术的发展,在采用NC(Node Controller,节点控制器)的多节点大型NUMA(Non Uniform Memory Access Achitecture,非统一内存访问)系统中,为了保证共享资源的一致性,通常使用自旋锁的机制进行多事务并发操作的控制。
现有技术中,服务器可将申请获取自旋锁的多个任务组成一个链表,并在该多个任务所在的处理器的缓存中,均保存一个相同的且由自旋锁保护的本地变量,从而服务器可以指示该多个任务均按照预先设定的时间间隔周期性的尝试获取该自旋锁,以访问该本地变量。
然而,在上述获取自旋锁的方法中,无论是否轮到其获取该自旋锁,链表中的任务均会周期性的尝试获取该自旋锁,随着链表中的任务数量的增加,将导致申请获取自旋锁的次数较多,并增加了系统的性能损耗。
发明内容
本发明的实施例提供一种获取自旋锁的方法及装置,能够降低由于多个任务竞争共享资源而造成的系统的性能损耗,从而提高系统的性能。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明实施例提供一种获取自旋锁的方法,包括:
接收请求获取自旋锁的任务;
将所述任务保存在排队队列中;
根据所述任务在所述排队队列中的位置,确定所述任务的自旋等待时间,以使得所述任务在所述自旋等待时间结束时,尝试获取所述自旋锁;
其中,所述任务在所述排队队列中的位置用于表征所述任务保存至所述排队队列中的先后顺序,先保存至所述排队队列中的任务的位置在后保存至所述排队队列中的任务的位置之前。
在第一方面的第一种可能的实现方式中,所述方法还包括:
根据预设检测周期,周期性的检测所述任务的自旋等待时间是否结束。
结合前述的第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,当所述任务在所述自旋等待时间结束时,尝试获取所述自旋锁之后,所述方法还包括:
若所述任务获取所述自旋锁失败,则重新确定所述任务在所述排队队列中的位置;
根据重新确定的所述任务在所述排队队列中的位置,重新确定所述任务的自旋等待时间,以使得所述任务在重新确定的所述自旋等待时间结束时,重新尝试获取所述自旋锁。
结合前述的第一方面或第一方面的第一种可能的实现方式至第二种可能的实现方式中的任一种实现方式,在第三种可能的实现方式中,所述方法还包括:
当位于所述排队队列首部的任务释放所述自旋锁时,更新所述任务在所述排队队列中的位置。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述当位于所述排队队列首部的任务释放所述自旋锁时,更新所述任务在所述排队队列中的位置,具体包括:
当位于所述排队队列首部的任务释放所述自旋锁时,将所述任务在所述排队队列中的位置更新为所述任务的前一个任务在所述排队队列中的位置。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410109467.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:缓冲资源的分配方法和装置
- 下一篇:一种更新桌面的方法、服务器和移动终端