动态加锁方法、电子设备及计算机可读存储介质技术

技术编号:35156153 阅读:26 留言:0更新日期:2022-10-05 10:38
本公开涉及一种动态加锁方法、电子设备和计算机可读存储介质。该动态加锁方法包括在通过设定的输入接口接收到外部函数的情况下按照第一模式执行外部函数;外部函数为对共享资源进行操作的函数,外部函数对共享资源进行的操作包括对共享资源中至少部分资源对象的写入操作,第一模式为对共享资源进行虚拟写入操作的不更新共享资源模式;记录按照第一模式执行外部函数的资源操作信息作为第一资源操作信息;根据第一资源操作信息在预置的映射数据中查找对应第一资源操作信息的锁,为外部函数添加查找到的锁得到加锁的外部函数;按照第二模式执行加锁的外部函数。根据该方法能够统一加锁规范解决死锁问题,并有效提高开发效率,提升程序吞吐能力。提升程序吞吐能力。提升程序吞吐能力。

【技术实现步骤摘要】
动态加锁方法、电子设备及计算机可读存储介质


[0001]本公开涉及计算机
,更具体地,涉及一种动态加锁方法、一种电子设备及一种计算机可读存储介质。

技术介绍

[0002]在多线程应用程序中,如果程序代码包含作为共享资源的资源对象的并发读写,但却没有对资源采用任何保护措施,就会产生资源竞争(Data Race)。其中,共享资源为多个线程都可以访问的资源,可以是内存中的变量或者是分布式数据库或缓存中的数据。也就是说,当多个线程并发访问资源对象且至少部分线程对资源对象执行写入操作时,可能产生覆盖写入与数据混乱的问题。为了解决这种问题,常规的做法是引入锁,对共享资源进行保护。同时,为了兼容对资源对象进行并发读取这种可以提升吞吐量的场景,在锁的种类上可以选择共享锁加互斥锁的组合,即读的时候只加共享锁,写的时候再加互斥锁,简称为读写锁。
[0003]使用锁时,如果程序涉及的资源对象数量比较多,就需要加多把锁,在这种情况下,如果各个资源对象之间关系比较复杂,或者相应程序由多名开发人员协同开发,那么开发过程中就可能出现一些与锁有关的问题,比如:1)如果不同开发成员操作锁的顺序不同,就非常容易造成死锁的现象;2)锁的数量越多,给开发人员造成的心智负担就越重,开发人员编写代码之前必须了解所有涉及的锁和它们的作用范围,因此很容易就漏掉某个锁;3)开发人员在修改旧代码的时候,因为新增了额外的代码,可能会导致旧代码原有的锁不再正确,这些都可能会造成了隐藏且难以排查的错误;4)开发人员手动加锁还可能造成的另外一个问题是锁强度放大。
[0004]可见,程序开发过程中可能出现的这些与锁有关的问题,会导致程序开发难度加大,开发周期加长,因此,有必要提供一种能够降低开发人员加锁负担的加锁方案。

技术实现思路

[0005]本公开实施例的一个目的是提供一种能够在应用程序运行中,为应用程序中的函数自动加锁的动态加锁方案。
[0006]根据本公开的第一方面,提供了一种动态加锁方法,其特征在于,包括:在通过设定的输入接口接收到外部函数的情况下,按照第一模式执行所述外部函数;其中,所述外部函数为对共享资源进行操作的函数,所述共享资源包括至少一个资源对象,所述外部函数对共享资源进行的操作包括对于所述共享资源中至少部分资源对象的写入操作,所述第一模式为对所述共享资源进行虚拟写入操作的不更新所述共享资源的模式;记录按照第一模式执行所述外部函数的资源操作信息,作为第一资源操作信息;根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁;其中,所述映射数据为反映资源操作信息与锁之间映射关系的数据;
为所述外部函数添加查找到的锁,得到加锁的外部函数;按照第二模式执行所述加锁的外部函数;其中,所述第二模式为对所述共享资源进行真实写入操作的更新所述共享资源的模式。
[0007]可选地,所述按照第二模式执行所述加锁的外部函数,包括:按照所述第一模式执行所述加锁的外部函数;在按照所述第一模式执行所述加锁的外部函数的过程中,将写入操作的写入数值保存在缓冲区,及记录按照第一模式执行所述加锁的外部函数的所述资源操作信息,作为第二资源操作信息;在所述第一资源操作信息与所述第二资源操作信息相同的情况下,根据所述缓冲区保存的写入数值,更新所述共享资源。
[0008]可选地,所述按照第二模式执行所述加锁的外部函数,还包括:在所述第一资源操作信息与所述第二资源操作信息不相同的情况下,通过所述第二资源操作信息更新所述第一资源操作信息,并重新执行所述根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁的步骤,直至满足设定条件中任一条件为止;其中,所述设定条件包括所述第一资源操作信息与当前一次执行所述步骤记录的第二资源操作信息相同的第一条件。
[0009]可选地,所述设定条件还包括第二条件,所述第二条件为重新执行所述根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁的步骤达到设定次数,仍无法满足所述第一条件;所述按照第二模式执行所述加锁的外部函数之后,所述方法还包括:在满足所述第二条件的情况下,通过设定的输出接口输出设定的返回值;其中,所述返回值包括表示未能成功执行所述外部函数的参数值。
[0010]可选地,所述资源操作信息包括所述外部函数操作的资源对象和所述资源对象对应的操作类型。
[0011]可选地,所述共享资源包括至少两个资源对象,所述为所述外部函数添加查找到的锁,包括:按照设定的排序规则,获得所述至少两个资源对象的加锁顺序;按照所述加锁顺序,依次为所述至少两个资源对象中的每一资源对象添加对应的锁。
[0012]可选地,所述按照第一模式执行所述外部函数之前,所述方法还包括:为所述外部函数创建对所述共享资源进行虚拟写入操作的缓冲区;所述按照第一模式执行所述外部函数,包括:将写入操作的写入数值保存在所述缓冲区中。
[0013]可选地,接收到外部函数之前,所述方法还包括:接收对于所述外部函数的注册信息;其中,所述注册信息包括所述外部函数操作的每一资源对象的资源对象标识、所对应的操作类型和所需添加的锁;根据所述注册信息,更新所述映射数据。
[0014]根据本公开的第二方面,提供了一种电子设备,该电子设备包括存储器和处理器,所述存储器用于存储计算机程序,所述处理器用于在所述计算机程序的控制下,执行根据
本公开第一方面中任一项所述的动态加锁方法。
[0015]根据本公开的第三方面,还提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序在被处理器执行时实现本公开第一方面中任一项所述的动态加锁方法。
[0016]本公开的一个有益效果在于,对于本公开实施例的动态加锁方法,开发人员可以通过动态加锁方法提供的接口,为应用程序中的需要加锁的外部函数引入动态加锁方法,以在应用程序运行时,通过该动态加锁方法自动为相应的外部函数加锁。该动态加锁方法在应用时,在通过设定的输入接口接收到外部函数的情况下,先按照不更新共享资源的第一模式执行外部函数,用于记录按照第一模式执行外部函数的第一资源操作信息,以根据第一资源操作信息,在预置的映射表中查找对应于第一资源操作信息的锁,并为外部函数增加查找到的锁,得到加锁的外部函数;然后,按照更新共享资源的第二模式执行加锁的外部函数,进而实现外部函数的自动加锁运行。基于本公开实施例的动态加锁方法,一方面,应用程序的开发人员只需关注核心代码即可,无需考虑加锁细节,能够有效提高开发效率;另一方面,在统一按照本公开实施例的动态加锁方法,为应用程序中各外部函数加锁时,相当于统一了加锁规范,可以从根本上解决死锁的问题;再一方面,由于开发人员无需自己手动加锁,因此,可以通过该方法增加粒度较小的锁,有利于提升应用程序的吞吐能力。
[0017]通过以下参照附图对本说明书的示例性实施例的详细描述,本说明书的实施例的特征及其优点将会变得清楚。
附图说明
[0018]被本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种动态加锁方法,其特征在于,包括:在通过设定的输入接口接收到外部函数的情况下,按照第一模式执行所述外部函数;其中,所述外部函数为对共享资源进行操作的函数,所述共享资源包括至少一个资源对象,所述外部函数对共享资源进行的操作包括对于所述共享资源中至少部分资源对象的写入操作,所述第一模式为对所述共享资源进行虚拟写入操作的不更新所述共享资源的模式;记录按照第一模式执行所述外部函数的资源操作信息,作为第一资源操作信息;根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁;其中,所述映射数据为反映资源操作信息与锁之间映射关系的数据;为所述外部函数添加查找到的锁,得到加锁的外部函数;按照第二模式执行所述加锁的外部函数;其中,所述第二模式为对所述共享资源进行真实写入操作的更新所述共享资源的模式。2.根据权利要求1所述的方法,其特征在于,所述按照第二模式执行所述加锁的外部函数,包括:按照所述第一模式执行所述加锁的外部函数;在按照所述第一模式执行所述加锁的外部函数的过程中,将写入操作的写入数值保存在缓冲区,及记录按照第一模式执行所述加锁的外部函数的所述资源操作信息,作为第二资源操作信息;在所述第一资源操作信息与所述第二资源操作信息相同的情况下,根据所述缓冲区保存的写入数值,更新所述共享资源。3.根据权利要求2所述的方法,其特征在于,所述按照第二模式执行所述加锁的外部函数,还包括:在所述第一资源操作信息与所述第二资源操作信息不相同的情况下,通过所述第二资源操作信息更新所述第一资源操作信息,并重新执行所述根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁的步骤,直至满足设定条件中任一条件为止;其中,所述设定条件包括所述第一资源操作信息与当前一次执行所述步骤记录的第二资源操作信息相同的第一条件。4.根据权利要求3所述的方法,其特征在于,所述设...

【专利技术属性】
技术研发人员:郭彬王鲲陈飞邹懋
申请(专利权)人:维塔科技北京有限公司
类型:发明
国别省市:

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

1