读写锁控制方法、装置、电子设备及存储介质制造方法及图纸

技术编号:36523357 阅读:11 留言:0更新日期:2023-02-01 16:00
本申请实施例公开了一种读写锁控制方法、装置、电子设备及存储介质。所述方法包括:接收第一线程发送的持写锁请求,所述第一线程处于等锁状态;接收第二线程发送的持读锁请求,所述第二线程处于等锁状态;若所述第二线程的重要性高于所述第一线程的重要性,对所述持读锁请求进行处理,以使所述第二线程持读锁成功。通过上述方法,先响应优先级的线程发送的持读锁请求,可以提高读锁的吞吐量,有效减少线程读锁卡顿的问题。读锁卡顿的问题。读锁卡顿的问题。

【技术实现步骤摘要】
读写锁控制方法、装置、电子设备及存储介质


[0001]本申请属于读写锁领域,具体涉及一种读写锁控制方法、装置、电子设备及存储介质。

技术介绍

[0002]对于多个线程共享同一个资源的时候,多个线程同时对共享资源做读操作是不会发生线程安全性问题的,但是一旦有一个线程对共享数据做写操作其他的线程再来读写共享资源的话,就会发生数据安全性问题,所以出现了读写锁。读写锁允许多个线程同时获取读锁,但有一个线程获取写锁之后其他线程都会进入等待队列进行等待。读写锁特别适用于绝大多数情况下是读只有少数情况是写的场景中,而且是维护数据的一致性关键解决技术。
[0003]目前,标准库中的读写锁是一种机会锁。一旦某个线程获取了读锁,则在该线程释放读锁之前到达的其他线程的读锁申请都会自动获取读锁形成一个读锁队列,仅当该读锁队列中的线程操作全部完成时,该读锁才会被释放,需要进行写操作的线程才有机会获取写锁。
[0004]在这种情况下会存在以下问题:假设A线程已经持有读锁,B线程申请了写锁,此时如果一直不断有线程申请读锁,则申请读锁的线程需要等待B线程写锁成功并完成写资源释放后才能读锁,会导致线程读锁卡顿的问题。

技术实现思路

[0005]鉴于上述问题,本申请提出了一种读写锁控制方法、装置、电子设备以及存储介质,以实现改善上述问题。
[0006]第一方面,本申请实施例提供了一种读写锁控制方法,所述方法包括:接收第一线程发送的持写锁请求,所述第一线程处于等锁状态;接收第二线程发送的持读锁请求,所述第二线程处于等锁状态;若所述第二线程的重要性高于所述第一线程的重要性,对所述持读锁请求进行处理,以使所述第二线程持读锁成功。
[0007]第二方面,本申请实施例提供了一种读写锁控制装置,所述装置包括:第一请求接收单元,用于接收第一线程发送的持写锁请求,所述第线一程处于等锁状态;第二请求接收单元,用于接收第二线程发送的持读锁请求,所述第二线程处于等锁状态;处理单元,用于若所述第二线程的重要性高于所述第一线程的重要性,对所述持读锁请求进行处理,以使所述第二线程持读锁成功。
[0008]第三方面,本申请实施例提供了一种电子设备,包括一个或多个处理器以及存储器;一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行上述的方法。
[0009]第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码运行时执行上述的方法。
[0010]本申请实施例提供了一种读写锁控制方法、装置、电子设备及存储介质。首先接收第一线程发送的持写锁请求,所述第一线程处于等锁状态,然后接收第二线程发送的持读锁请求,所述第二线程处于等锁状态,若所述第二线程的重要性高于第一线程的重要性,对持读锁请求进行处理,以使第二线程持读锁成功。通过上述方法,先响应优先级的线程发送的持读锁请求,可以提高读锁的吞吐量,有效减少线程读锁卡顿的问题。
附图说明
[0011]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0012]图1示出了本申请一实施例提出的一种读写锁控制方法的流程图;
[0013]图2示出了本申请另一实施例提出的一种读写锁控制方法的流程图;
[0014]图3示出了本申请另一实施例中步骤S210

步骤S240所述过程的示意图;
[0015]图4示出了本申请再一实施例提出的一种读写锁控制方法的流程图;
[0016]图5示出了本申请再一实施例中步骤S310

步骤S360所述过程的示意图;
[0017]图6示出了本申请再一实施例中步骤S310

步骤S360所述过程的另一种示意图;
[0018]图7示出了本申请又一实施例提出的一种读写锁控制方法的流程图;
[0019]图8示出了本申请实施例提出的一种读写锁控制装置的结构框图;
[0020]图9示出了本申请实时中的用于执行根据本申请实施例的读写锁控制方法的电子设备的结构框图;
[0021]图10示出了本申请实时中的用于保存或者携带实现根据本申请实施例的读写锁控制方法的程序代码的存储单元。
具体实施方式
[0022]下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0023]随着移动终端技术的迅速发展,消费者对于移动终端的需求不再仅仅局限于实现简单的功能,而是可以流畅的使用多种功能。而随着移动终端的功能的需求越发强大,各种超大型应用孕育而生,超大型应用意味着对系统资源的需求越来越大。随着对系统资源的需求越来越大,伴随而来的就是对共享资源的保护和同步需求越来越多。而从当前的移动终端市场上发现的问题看,锁等待导致的应用卡顿的越来越严重,更严重的会导致系统宕机。
[0024]操作系统的锁种类从大类上一般可以分为自旋锁和睡眠锁两大类。
[0025]其中,自旋锁是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。这种锁的应用场景一般包括共享资源访问时间较短,或者线程处于不能进入睡眠的场景,
例如中断场景等。睡眠锁是指当前线程需要持睡眠锁时,如果发现该锁已经被其他线程持有,则当前线程会让出CPU,让自己进入睡眠状态,直到持锁线程释放该锁的时候,尝试唤醒线程。这种锁的使用场景就很明了,避免自旋过度的使用CPU,导致CPU负载高的场景。
[0026]在睡眠锁中又有一类锁被称为读写锁。读写锁分为读锁和写锁。处于读操作时,可以允许多个线程同时获得读操作。但是同一时刻只能有一个线程可以获得写锁。其它获取写锁失败的线程都会进入睡眠状态,直到写锁释放时被唤醒。
[0027]专利技术人在对相关的读写锁控制方法的研究中发现,读写锁在其生命周期可能遇到的情况可以包括:(1)所有线程都在读锁,那么所有线程都不阻塞,因为持读锁的线程对共享资源不会有修改,所以所有线程都可以零阻塞访问资源;(2)读锁和写锁同时进行,在这种情况下线程就会相互阻塞了,不管是先持读锁还是先持写锁都一样。
[0028]读锁和写锁同时进行可以包括多种情况。作为其中一种情况,写锁

>读锁,即如果先持写锁,那么持写锁的线程需要修改资源,持读锁的线程需要等资源修改完成,以达到同步。
[0029]作为其中另一种情况,读锁
...

【技术保护点】

【技术特征摘要】
1.一种读写锁控制方法,其特征在于,所述方法包括:接收第一线程发送的持写锁请求,所述第一线程处于等锁状态;接收第二线程发送的持读锁请求,所述第二线程处于等锁状态;若所述第二线程的重要性高于所述第一线程的重要性,对所述持读锁请求进行处理,以使所述第二线程持读锁成功。2.根据权利要求1所述的方法,其特征在于,所述对所述持读锁请求进行处理,以使所述第二线程持读锁成功,包括:检测是否满足所述第一线程对应的被越级条件;若满足,对所述持读锁请求进行处理,以使所述第二线程持读锁成功。3.根据权利要求2所述的方法,其特征在于,所述若满足,对所述持读锁请求进行处理,以使所述第二线程持读锁成功,包括:获取所述第一线程被越级的次数和所述第一线程的等待时长;若所述次数小于或等于预设次数,且所述等待时长小于或等于预设时长,确定满足所述第一线程对应的被越级条件,对所述持读锁请求进行处理,以使所述第二线程持读锁成功。4.根据权利要求3所述的方法,其特征在于,所述获取所述第一线程被越级的次数之前还包括:当接收到所述第一线程发送的持写锁请求时,若检测到有线程持读锁成功,将所述第一线程被越级的次数加一;或者,若检测到所述第二线程持读锁成功,将所述第一线程被越级的次数加一。5.根据权利要求3所述的方法,其特征在于,所述方法还包括:若所述次数大于所述预设次数,或所述等待时长大于所述预设时长,确定不满足...

【专利技术属性】
技术研发人员:李培锋郭健
申请(专利权)人:OPPO广东移动通信有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1