[发明专利]分散式重锁降级有效
申请号: | 201910050640.6 | 申请日: | 2019-01-20 |
公开(公告)号: | CN111459462B | 公开(公告)日: | 2023-05-09 |
发明(设计)人: | 杨启彬;秦巍;张斌;赵俊民;朱金鹏 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F8/41;G06F9/52 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 分散 式重锁 降级 | ||
本申请的实施例提供了一种锁操作方法,该锁操作方法运行在电子设备上,该电子设备上布置有第一对象,该第一对象是一段代码,该电子设备上布置有至少一个应用程序,该至少一个应用程序具有第一线程,第一线程持有第一对象的锁,该锁包括记录锁的状态的锁字,该锁操作方法包括在不暂停第一线程的条件下执行:步骤1,检查第一对象的锁的状态;步骤2,在第一对象的锁是重锁的条件下,判断是否有其他线程在等候第一对象的锁;步骤3,在步骤2中判断为无其他线程在等候第一对象的锁的条件下,将第一对象的锁降级。
技术领域
本发明涉及计算机领域,尤其涉及一种锁操作方法和运行该锁操作方法的电子设备。
背景技术
Java语言应用广泛,例如在采用J2EE的网络服务中,在移动终端中通常采用的安卓(android)操作系统中,在可运行在安卓操作系统或ios操作系统上的应用软件中,在富客户应用(rich client application)中等都可以使用Java语言进行开发,进而使得软件在Java运行环境中运行。
Java一个特征是支持并行运行(parallel processing),也称为并发,即在一个时段内同时有多个程序或多个线程,它们中的一些可能要去访问相同的资源,例如同一个对象,从而产生了竞争。为了保证有序的运行,Java提供了基于对象的锁(lock)机制,同一时间内只有一个线程能够持有锁,而只有当该线程释放该锁后,别的线程才有可能再持有该对象的锁并且运行该对象包含的程序代码。其中一种用于竞争较为激烈情况下的锁被称为重锁(fatlock),其会导致较多的系统调用,从而产生较大的开销。并且对象一旦具有了重锁,是不会通过线程拿(obtain)锁和释放(release)锁取消的。换言之,如果没有特殊干预,这些对象将一直背负重锁,随着重锁对象数目增多以及在其生命周期中访问其的次数累积,伴随的系统调用给系统带来较大负担。而其中一些对象在具有重锁后可能已不再处于竞争状态,重锁对其不再必要。可以看出,需要一种锁降级(deflation)机制,将不必要存在的重锁降级,以降低系统负担,提高运行效率。
目前,谷歌公司开发的ART(android runtime)虚拟机提供一种在垃圾回收(garbage collection,GC)中附带的锁降级机制。GC时会暂停运行时,即暂停由应用程序创建的线程。GC时集中锁降级的方式一方面不能解决两次GC之间重锁带来的不必要的系统负担问题,另一方面,GC时对线程的暂停给用户带来卡顿体验(根据GC清理范围的不同,单次GC耗时可达到几百毫秒)。因此暂停虚拟机是从保证用户流畅体验角度所不希望的,而过长间隔的GC从锁降级角度来讲又是低效的。
发明内容
本申请实施例提供一种分散式锁降级机制,其中,锁降级时机独立于GC,当前持锁线程在释放重锁时如果检测到对象该锁不再处于竞争中,就及时将重锁降级。一次锁降级耗时为纳秒级,用户感知不到。从而通过这种分散式锁降级机制一方面保证了不因锁降级而影响用户的流畅性体验,一方面及时规避不必要的重锁开销。
为了达到上述目的,本申请实施例采用如下技术方案:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910050640.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种抗菌亲水纳米纤维膜及其制备方法
- 下一篇:一种包含封堵颗粒组合物的钻井液