[发明专利]读写锁重入的实现方法、装置、终端及存储介质有效
申请号: | 201810987084.0 | 申请日: | 2018-08-28 |
公开(公告)号: | CN109271258B | 公开(公告)日: | 2020-11-17 |
发明(设计)人: | 冯凯文;陈卓;党跃东;彭荣贵;鲍万宇;倪忠俊 | 申请(专利权)人: | 百度在线网络技术(北京)有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 北京品源专利代理有限公司 11332 | 代理人: | 孟金喆 |
地址: | 100085 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 读写 锁重入 实现 方法 装置 终端 存储 介质 | ||
本发明实施例公开了一种读写锁重入的实现方法、装置、终端及存储介质。该方法包括:接收任一线程对目标资源的当前加锁请求;若所述目标资源处于写锁独占状态,则获取对所述目标资源处于写锁独占状态的历史写锁线程;若该线程与所述历史写锁线程相同,则为所述目标资源添加该线程的新锁。通过本发明的技术方案,通过单线程内支持写锁重入,避免了死锁问题,提高了系统的性能。
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种读写锁重入的实现方法、装置、终端及存储介质。
背景技术
自动驾驶系统是一个高并发的系统,目前为了保证运行时数据的一致性,会采用大量锁来对临界区的数据进行保护,而过多的锁等待会造成系统性能的下降。
读写锁实际是一种特殊的自旋锁,它把对共用资源的访问者划分成读者和写者,读者和写者可通过线程对共用资源进行访问。其中,读者只对共用资源进行读操作,写者则需要对共用资源进行写操作。写操作是指改变临界区的公共资源状态的操作,读操作是指不改变公共资源状态的操作。由于读写锁具有写锁独占的特性,能够保证共用资源数据的一致性,以及读锁共享的特性,因此,合理使用读写锁可以显著提高并发系统的性能,减少条件竞争时互相锁等待的时间。
但是在某些情况下,如一个复杂的操作会包括一个写操作(A)、写操作(B)和一个读操作(C),为了保证数据一致性,三个操作都会加上锁保护,A(写)B(写)C(读),执行该操作时则会出现A写加锁-B写加锁-B写解锁-C读加锁-C读解锁-A写解锁,由于写锁的独占特性,导致A写加锁,其它后续操作不能执行,出现了死锁的现象,从而使系统的性能降低。
发明内容
本发明实施例提供一种读写锁重入的实现方法、装置、终端及存储介质,通过单线程内支持写锁重入,避免了死锁问题,提高了系统的性能。
第一方面,本发明实施例提供了一种读写锁重入的实现方法,包括:
接收任一线程对目标资源的当前加锁请求;
若所述目标资源处于写锁独占状态,则获取对所述目标资源处于写锁独占状态的历史写锁线程;
若该线程与所述历史写锁线程相同,则为所述目标资源添加该线程的新锁。
第二方面,本发明实施例还提供了一种读写锁重入的实现装置,该装置包括:
请求接收模块,用于接收任一线程对目标资源的当前加锁请求;
历史线程获取模块,用于若所述目标资源处于写锁独占状态,则获取对所述目标资源处于写锁独占状态的历史写锁线程;
锁添加模块,用于若该线程与所述历史写锁线程相同,则为所述目标资源添加该线程的新锁。
第三方面,本发明实施例还提供了一种终端,该终端包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现第一方面中任意所述的读写锁重入的实现方法。
第四方面,本发明实施例还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任意所述的读写锁重入的实现方法。
本发明实施例提供的读写锁重入的实现方法、装置、终端及存储介质,在接收到任一线程对目标资源的当前加锁请求后,对目标资源当前所处的状态进行判断,若目标资源处于写锁独占状态,则获取对目标资源处于写锁独占状态的历史写锁线程,并在该线程与历史写锁线程相同即为同一线程的情况下,对目标资源添加该线程的新锁。实现了同一线程可以写锁重入,避免了死锁问题,提高了系统的性能。
附图说明
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于百度在线网络技术(北京)有限公司,未经百度在线网络技术(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810987084.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种低介电双马来酰亚胺树脂体系用预聚体
- 下一篇:一种数据处理方法及装置