CN115145737A - 动态加锁方法、电子设备及计算机可读存储介质 - Google Patents
动态加锁方法、电子设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN115145737A CN115145737A CN202211063069.XA CN202211063069A CN115145737A CN 115145737 A CN115145737 A CN 115145737A CN 202211063069 A CN202211063069 A CN 202211063069A CN 115145737 A CN115145737 A CN 115145737A
- Authority
- CN
- China
- Prior art keywords
- resource
- external function
- operation information
- mode
- executing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及一种动态加锁方法、电子设备和计算机可读存储介质。该动态加锁方法包括在通过设定的输入接口接收到外部函数的情况下按照第一模式执行外部函数;外部函数为对共享资源进行操作的函数,外部函数对共享资源进行的操作包括对共享资源中至少部分资源对象的写入操作,第一模式为对共享资源进行虚拟写入操作的不更新共享资源模式;记录按照第一模式执行外部函数的资源操作信息作为第一资源操作信息;根据第一资源操作信息在预置的映射数据中查找对应第一资源操作信息的锁,为外部函数添加查找到的锁得到加锁的外部函数;按照第二模式执行加锁的外部函数。根据该方法能够统一加锁规范解决死锁问题,并有效提高开发效率,提升程序吞吐能力。
Description
技术领域
本公开涉及计算机技术领域,更具体地,涉及一种动态加锁方法、一种电子设备及一种计算机可读存储介质。
背景技术
在多线程应用程序中,如果程序代码包含作为共享资源的资源对象的并发读写,但却没有对资源采用任何保护措施,就会产生资源竞争(Data Race)。其中,共享资源为多个线程都可以访问的资源,可以是内存中的变量或者是分布式数据库或缓存中的数据。也就是说,当多个线程并发访问资源对象且至少部分线程对资源对象执行写入操作时,可能产生覆盖写入与数据混乱的问题。为了解决这种问题,常规的做法是引入锁,对共享资源进行保护。同时,为了兼容对资源对象进行并发读取这种可以提升吞吐量的场景,在锁的种类上可以选择共享锁加互斥锁的组合,即读的时候只加共享锁,写的时候再加互斥锁,简称为读写锁。
使用锁时,如果程序涉及的资源对象数量比较多,就需要加多把锁,在这种情况下,如果各个资源对象之间关系比较复杂,或者相应程序由多名开发人员协同开发,那么开发过程中就可能出现一些与锁有关的问题,比如:1)如果不同开发成员操作锁的顺序不同,就非常容易造成死锁的现象;2)锁的数量越多,给开发人员造成的心智负担就越重,开发人员编写代码之前必须了解所有涉及的锁和它们的作用范围,因此很容易就漏掉某个锁;3)开发人员在修改旧代码的时候,因为新增了额外的代码,可能会导致旧代码原有的锁不再正确,这些都可能会造成了隐藏且难以排查的错误;4)开发人员手动加锁还可能造成的另外一个问题是锁强度放大。
可见,程序开发过程中可能出现的这些与锁有关的问题,会导致程序开发难度加大,开发周期加长,因此,有必要提供一种能够降低开发人员加锁负担的加锁方案。
发明内容
本公开实施例的一个目的是提供一种能够在应用程序运行中,为应用程序中的函数自动加锁的动态加锁方案。
根据本公开的第一方面,提供了一种动态加锁方法,其特征在于,包括:
在通过设定的输入接口接收到外部函数的情况下,按照第一模式执行所述外部函数;其中,所述外部函数为对共享资源进行操作的函数,所述共享资源包括至少一个资源对象,所述外部函数对共享资源进行的操作包括对于所述共享资源中至少部分资源对象的写入操作,所述第一模式为对所述共享资源进行虚拟写入操作的不更新所述共享资源的模式;
记录按照第一模式执行所述外部函数的资源操作信息,作为第一资源操作信息;
根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁;其中,所述映射数据为反映资源操作信息与锁之间映射关系的数据;
为所述外部函数添加查找到的锁,得到加锁的外部函数;
按照第二模式执行所述加锁的外部函数;其中,所述第二模式为对所述共享资源进行真实写入操作的更新所述共享资源的模式。
可选地,所述按照第二模式执行所述加锁的外部函数,包括:
按照所述第一模式执行所述加锁的外部函数;
在按照所述第一模式执行所述加锁的外部函数的过程中,将写入操作的写入数值保存在缓冲区,及记录按照第一模式执行所述加锁的外部函数的所述资源操作信息,作为第二资源操作信息;
在所述第一资源操作信息与所述第二资源操作信息相同的情况下,根据所述缓冲区保存的写入数值,更新所述共享资源。
可选地,所述按照第二模式执行所述加锁的外部函数,还包括:
在所述第一资源操作信息与所述第二资源操作信息不相同的情况下,通过所述第二资源操作信息更新所述第一资源操作信息,并重新执行所述根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁的步骤,直至满足设定条件中任一条件为止;其中,所述设定条件包括所述第一资源操作信息与当前一次执行所述步骤记录的第二资源操作信息相同的第一条件。
可选地,所述设定条件还包括第二条件,所述第二条件为重新执行所述根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁的步骤达到设定次数,仍无法满足所述第一条件;
所述按照第二模式执行所述加锁的外部函数之后,所述方法还包括:
在满足所述第二条件的情况下,通过设定的输出接口输出设定的返回值;其中,所述返回值包括表示未能成功执行所述外部函数的参数值。
可选地,所述资源操作信息包括所述外部函数操作的资源对象和所述资源对象对应的操作类型。
可选地,所述共享资源包括至少两个资源对象,所述为所述外部函数添加查找到的锁,包括:
按照设定的排序规则,获得所述至少两个资源对象的加锁顺序;
按照所述加锁顺序,依次为所述至少两个资源对象中的每一资源对象添加对应的锁。
可选地,所述按照第一模式执行所述外部函数之前,所述方法还包括:
为所述外部函数创建对所述共享资源进行虚拟写入操作的缓冲区;
所述按照第一模式执行所述外部函数,包括:
将写入操作的写入数值保存在所述缓冲区中。
可选地,接收到外部函数之前,所述方法还包括:
接收对于所述外部函数的注册信息;其中,所述注册信息包括所述外部函数操作的每一资源对象的资源对象标识、所对应的操作类型和所需添加的锁;
根据所述注册信息,更新所述映射数据。
根据本公开的第二方面,提供了一种电子设备,该电子设备包括存储器和处理器,所述存储器用于存储计算机程序,所述处理器用于在所述计算机程序的控制下,执行根据本公开第一方面中任一项所述的动态加锁方法。
根据本公开的第三方面,还提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序在被处理器执行时实现本公开第一方面中任一项所述的动态加锁方法。
本公开的一个有益效果在于,对于本公开实施例的动态加锁方法,开发人员可以通过动态加锁方法提供的接口,为应用程序中的需要加锁的外部函数引入动态加锁方法,以在应用程序运行时,通过该动态加锁方法自动为相应的外部函数加锁。该动态加锁方法在应用时,在通过设定的输入接口接收到外部函数的情况下,先按照不更新共享资源的第一模式执行外部函数,用于记录按照第一模式执行外部函数的第一资源操作信息,以根据第一资源操作信息,在预置的映射表中查找对应于第一资源操作信息的锁,并为外部函数增加查找到的锁,得到加锁的外部函数;然后,按照更新共享资源的第二模式执行加锁的外部函数,进而实现外部函数的自动加锁运行。基于本公开实施例的动态加锁方法,一方面,应用程序的开发人员只需关注核心代码即可,无需考虑加锁细节,能够有效提高开发效率;另一方面,在统一按照本公开实施例的动态加锁方法,为应用程序中各外部函数加锁时,相当于统一了加锁规范,可以从根本上解决死锁的问题;再一方面,由于开发人员无需自己手动加锁,因此,可以通过该方法增加粒度较小的锁,有利于提升应用程序的吞吐能力。
通过以下参照附图对本说明书的示例性实施例的详细描述,本说明书的实施例的特征及其优点将会变得清楚。
附图说明
被结合在说明书中并构成说明书的一部分的附图示出了本说明书的实施例,并且连同其说明一起用于解释本说明书实施例的原理。
图1是本公开提供的一种可用于实现动态加锁方法的硬件结构示意图;
图2是本公开一种动态加锁方法的流程示意图;
图3是本公开一种动态加锁装置示意图;
图4是本公开一种电子设备示意图。
具体实施方式
现在将参照附图来详细描述本说明书的各种示例性实施例。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本说明书实施例及其应用或使用的任何限制。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
需要说明的是,本公开中所有获取信号、信息或数据的动作都是在遵照所在地国家相应的数据保护法规政策的前提下,并获得由相应设备所有者给予授权的情况下进行的。
本公开实施例涉及一种为应用程序中的对共享资源进行操作的函数进行加锁的方案。
在相关技术中,通常是由开发人员手动加锁,如果应用程序涉及的共享资源的资源对象数量比较多,那么锁会有很多把;另外,发明人发现,如果资源对象之间关系比较复杂,并且由多名开发人员协同开发,开发过程中就可能出现一些与锁有关的问题,比如:
1)操作多种资源对象时,需要同时加多把锁。如果开发团队没有制定加锁规范或者有规范但实施不到位的话,就会出现不同的开发人员写的代码,操作锁的顺序不同,就非常容易造成死锁的现象;
2)锁的数量越多,给开发人员造成的心智负担就越重。开发人员编写代码之前必须了解所有涉及的锁和它们的作用范围,因此很容易就漏掉某个锁;或者,在修改旧代码的时候,因为新增了额外的代码,导致旧代码原有加的锁不再正确,这些都可能会造成了隐藏且难以排查的缺陷(BUG);
3) 开发人员手动加锁还可能造成的另外一个问题是锁强度放大。例如,一个函数为:先读取某个资源对象,然后根据该资源对象的状态决定是否修改该资源对象,即该函数有两个逻辑分支,一个是无需修改该资源对象的分支,只需共享锁即可;另外一个是需要修改该资源对象的分支,则需要互斥锁。对此,由于开发人员编写函数的时候,不能预判资源对象的状态和函数的执行分支,只能按照最大强度的情况,即按照会修改资源对象的分支进行加互斥锁,进而放大了加锁强度。
针对以上部分问题,在一种相关方案中,可以放大锁的粒度,减少锁的数量。比如使用一些粒度很大,甚至全局粒度的大锁,用来保护多种甚至所有资源对象;这样,虽然可以一定程度上解决死锁的问题,但却会大大降低应用程序的吞吐能力。在另一种相关方案中,可以不使用悲观锁,改为使用多版本控制加乐观锁的形式,这会大大提升应用程序的复杂度。
可见,这些相关方案无法从根本上解决上述问题,为此,发明人提出了一种在应用程序运行中,基于统一规则为应用程序中的对共享资源进行操作的函数进行加锁的动态加锁方案,以减轻开发人员的负担,提高开发效率,并解决死锁等问题。
图1示出了用于实施本公开实施例的动态加锁方法的一种可供选择的电子设备1000的硬件结构示意图。该电子设备1000可以是任意的具有计算能力的计算机设备,该电子设备1000可以是服务器,也可以是PC机、笔记本电脑等电子设备,在此不做限定。
如图1所示,该电子设备1000可以包括处理器1101、存储器1102、接口装置1103、通信装置1104、输出装置1105、输入装置1106等等。图1所示的硬件配置仅是解释性的,并且决不是为了要限制本公开、其应用或用途。
处理器1101用于执行计算机程序,该计算机程序可以采用比如x86、Arm 、RISC、MIPS、SSE等架构的指令集编写。存储器1102例如包括ROM(只读存储器)、RAM(随机存取存储器)、诸如硬盘的非易失性存储器等。接口装置1103例如包括USB接口、耳机接口等。通信装置1104例如能够进行有线或无线通信,通信装置1105可以包括至少一种短距离通信模块,例如是基于Hilink协议、WiFi(IEEE 802.11协议)、Mesh、蓝牙、ZigBee、Thread、Z-Wave、NFC、UWB、LiFi等短距离无线通信协议进行短距离无线通信的任意模块,通信装置1104也可以包括远程通信模块,例如是进行WLAN、GPRS、2G/3G/4G/5G远程通信的任意模块。输出装置1105例如可以包括液晶显示屏或者触摸显示屏、扬声器等。输入装置1106例如可以包括触摸屏、键盘、麦克风、各种传感器等。
本实施例中,电子设备1000的存储器1102用于存储计算机程序,该计算机程序用于控制处理器1101进行操作,以执行根据本公开任意实施例的动态加锁方法。
<方法实施例>
图2是根据本发明实施例的一种动态加锁方法的流程示意图。本实施例中,动态加锁方法由电子设备1000实施,可以包括如下步骤:
步骤S210,在通过设定的输入接口接收到外部函数的情况下,按照第一模式执行所述外部函数;
本实施例中,通过设定统一执行接口,如输入接口供开发人员使用,进而对开发人员屏蔽加锁细节,减少开发人员手动加锁的心智负担,以及由此引发的锁强度放大问题,更有利于保障开发人员专注自身核心代码,提高开发效率。
在本实施例中,动态加锁方法可以是一个封装的程序,例如是供程序开发人员使用的工具包,开发人员开发应用程序时所编写的,对于共享资源进行操作的函数,对于该工具包而言即为外部函数。
本实施例中的共享资源包括至少一个资源对象,所述外部函数对共享资源进行的操作包括对于共享资源中至少部分资源对象的写入操作,所述第一模式为对所述共享资源进行虚拟写入操作的不更新所述共享资源的模式。
该实施例中的共享资源是指多个线程都可以访问的自由,例如可以是内存中的变量、分布式数据库,以及缓存中数据等。该实施例中外部函数对共享资源进行操作可以包括对至少部分资源对象的写入操作,还可以包括对于至少部分资源对象的读取操作。写入操作与读取操作对应的资源对象可以不同,也可以有重合。
步骤S220,记录按照第一模式执行所述外部函数的资源操作信息,作为第一资源操作信息;
记录根据步骤S210中按照第一模式执行外部函数获得的资源操作信息,将该第一资源操作信息用于后续查找、比对使用。
例如,第一资源操作信息可以包括外部函数操作的资源对象和资源对象对应的操作类型。该操作类型包括写入操作和读取操作中的至少一项,资源操作信息可以通过资源对象标识来指代对应的资源对象,该资源对象标识可以是资源对象的资源名称等可以映射到相应资源对象的任意标识,在此不做限定。
步骤S230,根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁;
本实施例中,所述映射数据为反映资源操作信息与锁之间映射关系的数据。该映射数据有利于根据资源类型和锁的类型等信息进行对应锁的查找。锁的类型例如可以是共享锁、互斥锁等。该映射数据可以由共享资源的数量和复杂度决定所使用的数据结构,例如可以是哈希表、树结构等。因此,使用步骤S220获得的第一资源操作信息,可以在该映射数据中查找到对应的锁。
步骤S240,为所述外部函数添加查找到的锁,得到加锁的外部函数。
将步骤S230中根据第一资源操作信息查找到的锁添加至该外部函数,进而得到加锁的外部函数,实现智能的动态加锁。
步骤S250,按照第二模式执行所述加锁的外部函数。
本实施例中,第一模式执行的外部函数是为获得资源操作信息的不更新共享资源的虚拟写入模式,第二模式执行加锁的外部函数是对所述共享资源进行真实写入操作的更新所述共享资源的模式。
在一个实施例中,该动态加锁方法中的按照第二模式执行所述加锁的外部函数,可以包括:按照所述第一模式执行所述加锁的外部函数;在按照所述第一模式执行所述加锁的外部函数的过程中,将写入操作的写入数值保存在缓冲区,及记录按照第一模式执行所述加锁的外部函数的所述资源操作信息,作为第二资源操作信息;在所述第一资源操作信息与所述第二资源操作信息相同的情况下,根据所述缓冲区保存的写入数值,更新所述共享资源。
本实施例中,按照第一模式执行加锁的外部函数获得的第二资源操作信息,与步骤S220中的获得的第一资源操作信息进行对比,在两资源操作信息完全相同的情况下,则根据缓冲区保存的写入数值更新共享资源,使该写入操作生效。有效减少共享资源发生覆盖写入与数据混乱的问题。
对于第一资源操作信息与第二资源操作信息不同的情况,在一个实施例中,可选地,该动态加锁方法中的按照第二模式执行所述外部函数,还可以包括:在所述第一资源操作信息与所述第二资源操作信息不相同的情况下,通过以上第二资源操作信息更新第一资源操作信息,并重新执行上述的根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁的步骤S230,进而继续执行以上步骤S240和步骤S250,直至满足设定条件中任一条件为止。其中,所述设定条件包括所述第一资源操作信息与当前一次执行所述步骤记录的第二资源操作信息相同的第一条件。
也就是说,在第一资源操作信息与第二资源操作信息不同的情况下,将第二资源操作信息作为新的第一资源操作信息,即,此时的第一资源操作信息被更新为第二资源操作信息,然后再一次执行以上步骤S230-步骤S250,直到获得与第一资源操作信息相同的第二资源操作信息,即满足以上第一条件,或者满足设定条件中的其他条件为止。
在一个实施例中,该设定条件还包括第二条件,所述第二条件为重新执行所述根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁的步骤S230达到设定次数,仍无法满足所述第一条件。即,在重复按照第一模式执行所述加锁的外部函数达到设定次数,例如重复执行3次,仍没有获得与第一资源操作信息相同的第二资源操作信息。则所述按照第二模式执行所述加锁的外部函数之后,所述动态加锁方法还包括:在满足所述第二条件的情况下,通过设定的输出接口输出设定的返回值;其中,所述返回值包括表示未能成功执行所述外部函数的参数值。
在一个实施例中,可选地,该动态加锁方法中的资源操作信息包括所述外部函数操作的资源对象和所述资源对象对应的操作类型。即,上述实施例中的第一资源操作信息和第二资源操作信息,均包括外部函数操作的资源对象和资源对象对应的操作类型。
更进一步,资源对象例如可以是共享资源中的内存中变量、分布式数据库以及缓存中数据等;操作类型例如可以是读取操作、修改操作等。
在共享资源包括至少两个资源对象的情况下,在一个实施例中,为所述外部函数添加查找到的锁,还可以包括:按照设定的排序规则,获得所述至少两个资源对象的加锁顺序;以及按照所述加锁顺序,依次为所述至少两个资源对象中的每一项资源对象添加对应的锁。
本实施例中设定的排序规则,例如可以是按照资源名称的字符排序。通过该设定的排序规则进一步确定资源对象的加锁顺序,即相当于制定了统一且必须实施的加锁规范,能够有效避免死锁现象的发生。
在一个实施例中,可选地,该动态加锁方法在按照第一模式执行所述外部函数之前,该动态加锁方法还包括:为所述外部函数创建对所述共享资源进行虚拟写入操作的缓冲区;所述按照第一模式执行所述外部函数,包括:将写入操作的写入数值保存在所述缓冲区中。
本实施例中的缓冲区用于存储外部函数的虚拟写入数值,即对于按照第一模式执行所述外部函数时,该写入操作不更新共享资源,仅保存在缓冲区。待第一资源操作信息与第二资源操作信息相同的情况下,再根据缓冲区保存的写入数值更新所述共享资源。缓冲区的数据结构可以由共享资源数量和复杂度决定。
在一个实施例中,可选地,该动态加锁方法在接收到外部函数之前,该动态加锁方法还包括:接收对于所述外部函数的注册信息;根据所述注册信息,更新所述映射数据。
本实施例中,所述注册信息包括所述外部函数操作的每一资源对象的资源对象标识、所对应的操作类型和所需添加的锁。每一资源对象标识均不同,保持资源标识的唯一性,该资源对象标识可以是资源对象的名称、编号等能够唯一映射至相应资源对象的任意类型的标识,在此不做限定。不同外部函数操作的资源对象可以是相同的,也可以是不同的。通过更新的映射数据,便于根据第一资源操作信息查找对应的锁。
对于外部函数的注册,可以在应用程序启动或者初始化时,对应用程序中所有外部函数涉及的资源对象进行统一注册,以提高注册效率。
相较于传统的在开发阶段就需将加锁代码固定下来的方式,本实施例通过探测程序对共享资源的真实操作情况,智能的动态执行加锁,保持最小化强度。避免因开发时无法确定资源状态导致的不必要的锁强度扩大。同时,向开发人员提供通过统一接口,屏蔽加锁的细节。开发人员只需关注自身核心代码即可,减少开发人员心智负担。并且,通过粒度较小的锁实现目的的同时简接提升了程序的吞吐能力。
<装置实施例>
如图3所示,本实施例提供一种动态加锁装置300,包括:执行器模块310、资源代理模块320,以及作为执行对象的外部函数330、共享资源340、映射数据350。动态加锁装置300由电子设备1000的处理器1101运行计算机程序实现。
执行器模块310,用于在通过设定的输入接口接收到外部函数330的情况下,按照第一模式执行所述外部函数330;其中,所述外部函数330为对共享资源340进行操作的函数;所述共享资源340包括至少一个资源对象,所述外部函数330对共享资源340进行的操作包括对于所述共享资源340中至少部分资源对象的写入操作,所述第一模式为对所述共享资源340进行虚拟写入操作的不更新所述共享资源340的模式;
资源代理模块320,用于记录按照第一模式执行所述外部函数330的资源操作信息,作为第一资源操作信息;
资源代理模块320,用于根据所述第一资源操作信息,在预置的映射数据350中查找对应于所述第一资源操作信息的锁;其中,所述映射数据350为反映资源操作信息与锁之间映射关系的数据;
执行器模块310,为所述外部函数330添加查找到的锁,得到加锁的外部函数;
资源代理模块320,按照第二模式执行所述加锁的外部函数;其中,所述第二模式为对所述共享资源340进行真实写入操作的更新所述共享资源340的模式。
<电子设备>
本公开实施例还提供了一种电子设备,如图4所示,该电子设备400包括处理器410和存储器420,该存储器420用于存储计算机程序,该计算机程序用于控制处理器410进行操作,以控制电子设备400执行根据本公开任意实施例的动态加锁方法。
上述动态加锁装置300可由电子设备400的处理器410运行计算机程序实现。
本公开实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储计算机程序,该计算机程序在被处理器执行时实现根据本公开任意实施例的动态加锁方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书的实施例可以是设备、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本说明书实施例的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本说明书的实施例操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本说明书实施例的各个方面。
这里参照根据本说明书实施例的方法、装置(设备)和计算机程序产品的流程图和/或框图描述了本说明书实施例的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本说明书的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。
以上已经描述了本说明书的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (10)
1.一种动态加锁方法,其特征在于,包括:
在通过设定的输入接口接收到外部函数的情况下,按照第一模式执行所述外部函数;其中,所述外部函数为对共享资源进行操作的函数,所述共享资源包括至少一个资源对象,所述外部函数对共享资源进行的操作包括对于所述共享资源中至少部分资源对象的写入操作,所述第一模式为对所述共享资源进行虚拟写入操作的不更新所述共享资源的模式;
记录按照第一模式执行所述外部函数的资源操作信息,作为第一资源操作信息;
根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁;其中,所述映射数据为反映资源操作信息与锁之间映射关系的数据;
为所述外部函数添加查找到的锁,得到加锁的外部函数;
按照第二模式执行所述加锁的外部函数;其中,所述第二模式为对所述共享资源进行真实写入操作的更新所述共享资源的模式。
2.根据权利要求1所述的方法,其特征在于,所述按照第二模式执行所述加锁的外部函数,包括:
按照所述第一模式执行所述加锁的外部函数;
在按照所述第一模式执行所述加锁的外部函数的过程中,将写入操作的写入数值保存在缓冲区,及记录按照第一模式执行所述加锁的外部函数的所述资源操作信息,作为第二资源操作信息;
在所述第一资源操作信息与所述第二资源操作信息相同的情况下,根据所述缓冲区保存的写入数值,更新所述共享资源。
3.根据权利要求2所述的方法,其特征在于,所述按照第二模式执行所述加锁的外部函数,还包括:
在所述第一资源操作信息与所述第二资源操作信息不相同的情况下,通过所述第二资源操作信息更新所述第一资源操作信息,并重新执行所述根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁的步骤,直至满足设定条件中任一条件为止;其中,所述设定条件包括所述第一资源操作信息与当前一次执行所述步骤记录的第二资源操作信息相同的第一条件。
4.根据权利要求3所述的方法,其特征在于,所述设定条件还包括第二条件,所述第二条件为重新执行所述根据所述第一资源操作信息,在预置的映射数据中查找对应于所述第一资源操作信息的锁的步骤达到设定次数,仍无法满足所述第一条件;
所述按照第二模式执行所述加锁的外部函数之后,所述方法还包括:
在满足所述第二条件的情况下,通过设定的输出接口输出设定的返回值;其中,所述返回值包括表示未能成功执行所述外部函数的参数值。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述资源操作信息包括所述外部函数操作的资源对象和所述资源对象对应的操作类型。
6.根据权利要求1至4中任一项所述的方法,其特征在于,所述共享资源包括至少两个资源对象,所述为所述外部函数添加查找到的锁,包括:
按照设定的排序规则,获得所述至少两个资源对象的加锁顺序;
按照所述加锁顺序,依次为所述至少两个资源对象中的每一资源对象添加对应的锁。
7.根据权利要求1至4中任一项所述的方法,其特征在于,所述按照第一模式执行所述外部函数之前,所述方法还包括:
为所述外部函数创建对所述共享资源进行虚拟写入操作的缓冲区;
所述按照第一模式执行所述外部函数,包括:
将写入操作的写入数值保存在所述缓冲区中。
8.根据权利要求1至4中任一项所述的方法,其特征在于,接收到外部函数之前,所述方法还包括:
接收对于所述外部函数的注册信息;其中,所述注册信息包括所述外部函数操作的每一资源对象的资源对象标识、所对应的操作类型和所需添加的锁;
根据所述注册信息,得到所述映射数据。
9.一种电子设备,其特征在于,包括存储器和处理器,所述存储器用于存储计算机程序,所述处理器用于在所述计算机程序的控制下,执行根据权利要求1至8中任一项所述的动态加锁方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1至8中任一项所述的动态加锁方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211063069.XA CN115145737B (zh) | 2022-08-31 | 2022-08-31 | 动态加锁方法、电子设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211063069.XA CN115145737B (zh) | 2022-08-31 | 2022-08-31 | 动态加锁方法、电子设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115145737A true CN115145737A (zh) | 2022-10-04 |
CN115145737B CN115145737B (zh) | 2022-12-30 |
Family
ID=83416438
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211063069.XA Active CN115145737B (zh) | 2022-08-31 | 2022-08-31 | 动态加锁方法、电子设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115145737B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063355A (zh) * | 2013-03-21 | 2014-09-24 | 腾讯科技(北京)有限公司 | 对服务器集群进行配置的方法及配置中心服务器 |
CN110019057A (zh) * | 2017-09-27 | 2019-07-16 | 华为技术有限公司 | 请求处理方法及装置 |
CN111639309A (zh) * | 2020-05-26 | 2020-09-08 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、节点设备及存储介质 |
US20220050818A1 (en) * | 2019-10-10 | 2022-02-17 | Tencent Technology (Shenzhen) Company Limited | Data processing method and related apparatus |
-
2022
- 2022-08-31 CN CN202211063069.XA patent/CN115145737B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063355A (zh) * | 2013-03-21 | 2014-09-24 | 腾讯科技(北京)有限公司 | 对服务器集群进行配置的方法及配置中心服务器 |
CN110019057A (zh) * | 2017-09-27 | 2019-07-16 | 华为技术有限公司 | 请求处理方法及装置 |
US20220050818A1 (en) * | 2019-10-10 | 2022-02-17 | Tencent Technology (Shenzhen) Company Limited | Data processing method and related apparatus |
CN111639309A (zh) * | 2020-05-26 | 2020-09-08 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、节点设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115145737B (zh) | 2022-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9164911B2 (en) | Atomic execution over accesses to multiple memory locations in a multiprocessor system | |
US10824420B2 (en) | Caching build graphs | |
JP6349395B2 (ja) | コールパスファインダ | |
JP5284103B2 (ja) | ソフトウェアトランザクショナルメモリ動作の最適化 | |
US11392427B2 (en) | Lock-free reading of unitary value sets | |
US8566368B2 (en) | Garbage collection extensibility via managed code | |
KR20220113372A (ko) | 통합된 참조물 및 2차 객체 표시 | |
US9454382B2 (en) | Verification of UML state machines | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
US8856763B2 (en) | Compiler optimization based on collectivity analysis | |
CN112650521A (zh) | 软件开发工具包sdk热修复方法、装置与电子设备 | |
CN115145737B (zh) | 动态加锁方法、电子设备及计算机可读存储介质 | |
US9081895B2 (en) | Identifying and tagging breakpoint instructions for facilitation of software debug | |
US11706082B1 (en) | Reconciliation of cloud service state | |
US8756611B2 (en) | Delayed expansion of values in context | |
US7873949B2 (en) | In source code suppression of binary analysis | |
US20240045658A1 (en) | Reducing code path permutations | |
AU2021390717B2 (en) | Batch job performance improvement in active-active architecture | |
Nitta et al. | A method for early detection of mismatches between framework architecture and execution scenarios | |
US20140025653A1 (en) | Source Control Inheritance Locking | |
CN115794770A (zh) | 关联数据的管理方法、装置、终端及可读存储介质 | |
CN116795371A (zh) | 条件编译方法、装置、设备及介质 | |
CN115292282A (zh) | 数据处理方法、装置、设备及存储介质 | |
US9298426B2 (en) | Compiler generation of thunking code | |
CN115495332A (zh) | 回归测试方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |