CN114385621A - 一种加锁方法、装置、设备及介质 - Google Patents
一种加锁方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN114385621A CN114385621A CN202011135028.8A CN202011135028A CN114385621A CN 114385621 A CN114385621 A CN 114385621A CN 202011135028 A CN202011135028 A CN 202011135028A CN 114385621 A CN114385621 A CN 114385621A
- Authority
- CN
- China
- Prior art keywords
- task
- lock
- portrait
- conflict
- storage path
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 48
- 230000000977 initiatory effect Effects 0.000 claims abstract description 11
- 238000005192 partition Methods 0.000 description 13
- 238000004590 computer program Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开实施例关于一种加锁方法、装置、设备及介质。该方法包括:针对第一任务的任务对象,发起锁请求;当存在针对所述任务对象的冲突锁时,则获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像,其中,任务画像包含表征任务优先级的特征;当所述第一任务的优先级高于第二任务的优先级时,根据所述第一任务变更所述任务对象的锁信息。该方法解决了在多个任务请求针对同一任务对象的锁时,需要按照顺序排队等锁,效率较低的问题,当存在锁冲突时,可以根据任务优先级进行锁抢占,不必排队等锁,提高重要数据生产链路的工作效率。
Description
技术领域
本公开实施例涉及计算机技术领域,尤其涉及一种加锁方法、装置、设备及介质。
背景技术
在大数据场景下,经常出现读写并发操作的情况,这种情况下数据是不安全的,读数据端可能读到写数据端已经写入但尚未提交的数据,即出现脏读,还可能出现写入任务尚未提交时被覆盖的情况,即出现脏写,为了避免这些问题,一般采用加锁的方法来提高数据安全性。
现有技术中,如果多个任务都需要进行加锁,一般FIFO(First Input FirstOutput,先进先出)的等锁方式,首先由最先请求锁的任务持有锁,在其任务执行结束并释放锁后再由下一请求任务持有锁,这种情况需要按照请求时间依次排队等锁,等待时间长,且灵活性差。
发明内容
本公开实施例提供一种加锁方法、装置、设备及存储介质,以解决相关技术中涉及到锁冲突需要排队等锁效率较低的问题。本公开的技术方案如下:
根据本公开实施例的第一方面,提供一种加锁方法,包括:
针对第一任务的任务对象,发起锁请求;
当存在针对所述任务对象的冲突锁时,则获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像,其中,任务画像包含表征任务优先级的特征;
当所述第一任务的优先级高于第二任务的优先级时,根据所述第一任务变更所述任务对象的锁信息。
可选的,所述锁请求包括请求加锁的锁类型;
所述加锁方法,还包括:
当所述锁请求的锁类型为写锁,且所述冲突锁的锁类型为读锁时,根据所述第一任务变更所述任务对象的锁信息。
可选的,获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像之前,还包括:
遍历已有锁的锁信息存储路径,其中,所述锁信息存储路径中包括任务对象的标识字段;
当所述锁信息存储路径中存在所述任务对象的标识时,确定存在针对所述任务对象的冲突锁。
可选的,获取持有冲突锁的第二任务的第二任务画像,包括:
根据所述冲突锁的锁信息存储路径,读取所述冲突锁的锁信息,所述锁信息中包含持有冲突锁的第二任务的任务画像存储路径;
根据所述第二任务的任务画像存储路径,获取所述第二任务的第二任务画像。
可选的,根据所述第一任务变更所述任务对象的锁信息包括:
根据所述第一任务的任务标识和任务画像存储路径,更新所述任务对象的锁信息中的任务画像存储路径和任务标识。
可选的,在根据所述第一任务变更所述任务对象的锁信息之后,还包括:
将所述第一任务的第一任务画像,加入至持有冲突锁的第二任务的第二任务画像中;
显示更新后的第二任务画像。
可选的,在根据所述第一任务变更所述任务对象的锁信息之后,还包括:
当所述第一任务持有全部任务对象对应的锁时,开始执行所述第一任务。
根据本公开实施例的第二方面,提供一种加锁装置,该装置包括:
锁请求发起模块,用于针对第一任务的任务对象,发起锁请求;
任务画像获取模块,用于当存在针对所述任务对象的冲突锁时,则获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像,其中,任务画像包含表征任务优先级的特征;
锁信息变更模块,用于当所述第一任务的优先级高于第二任务的优先级时,根据所述第一任务变更所述任务对象的锁信息。
可选的,所述锁请求包括请求加锁的锁类型;
所述加锁装置,还用于:
当所述锁请求的锁类型为写锁,且所述冲突锁的锁类型为读锁时,根据所述第一任务变更所述任务对象的锁信息。
可选的,所述加锁装置,还包括:
存储路径遍历模块,用于获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像之前,遍历已有锁的锁信息存储路径,其中,所述锁信息存储路径中包括任务对象的标识字段;
冲突锁确定模块,用于当所述锁信息存储路径中存在所述任务对象的标识时,确定存在针对所述任务对象的冲突锁。
可选的,所述任务画像获取模块,包括:
锁信息读取单元,用于根据所述冲突锁的锁信息存储路径,读取所述冲突锁的锁信息,所述锁信息中包含持有冲突锁的第二任务的任务画像存储路径;
任务画像获取单元,用于根据所述第二任务的任务画像存储路径,获取所述第二任务的第二任务画像。
可选的,所述锁信息变更模块,具体用于:
根据所述第一任务的任务标识和任务画像存储路径,更新所述任务对象的锁信息中的任务画像存储路径和任务标识。
可选的,所述加锁装置,还包括:
任务画像加入模块,用于在根据所述第一任务变更所述任务对象的锁信息之后,将所述第一任务的第一任务画像,加入至持有冲突锁的第二任务的第二任务画像中;
任务画像显示模块,用于显示更新后的第二任务画像。
可选的,所述加锁装置,还包括:
任务执行模块,用于在根据所述第一任务变更所述任务对象的锁信息之后,当所述第一任务持有全部任务对象对应的锁时,开始执行所述第一任务。
根据本公开实施例的第三方面,提供一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如本公开任一实施例所述的加锁方法。
根据本公开实施例的第四方面,提供一种存储介质,所述存储介质中的指令由服务器的处理器执行时,使得服务器能够执行如公开任一实施例所述的加锁方法。
根据本公开实施例的第五方面,提供一种计算机程序产品,用于与电子设备结合使用,所述计算机程序产品包括计算机可读存储介质和内嵌于其中的计算机程序机制,经由计算机载入该程序并执行后能够实现如本公开任一实施例所述的加锁方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
解决了在多个任务请求针对同一任务对象的锁时,需要按照顺序排队等锁,效率较低的问题,当存在锁冲突时,可以根据任务优先级进行锁抢占,使优先级高的任务可以先持有锁,不必排队等锁,提高重要的数据生产链路的工作效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种加锁方法的流程图。
图2是根据一示例性实施例示出的一种加锁方法的流程图。
图3是根据一示例性实施例示出的一种加锁方法的流程图。
图4是根据一示例性实施例示出的一种加锁装置框图。
图5是根据一示例性实施例示出的一种电子设备的结构示意图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
针对基于大数据的生产场景任务,经常会出现SQL读写并发操作,此时数据是不安全的,读数据任务可能读到写数据任务已经写入但尚未提交的数据,而写数据任务后续可能会进行数据回滚,此时读数据任务读到数据是不准确的,即出现脏读,还可能出现写入任务尚未提交时被覆盖的情况,即出现脏写,为了避免这些问题,引入了锁机制,当某一任务持有针对某一任务对象的锁时,其他任务无法对这一任务对象进行数据更新,现有技术中,当有多个任务需要持有同一任务对象的锁时,采用排队等锁的方式,按照任务请求锁的先后顺序来持有针对这一任务对象的锁,这样的等锁机制效率较低,可能造成一些重要链路需要等待较长时间才能持有锁,等锁耗时过程导致任务执行效率较低。
本公开实施例可以适用于根据任务优先级来进行锁抢占的情况,具体的,首先针对第一任务的任务对象,发起锁请求,当存在针对任务对象的冲突锁时,则获取第一任务的第一任务画像和持有冲突锁的第二任务的第二任务画像,其中,任务画像包含表征任务优先级的特征,当第一任务的优先级高于第二任务的优先级时,根据第一任务变更任务对象的锁信息,解决了在多个任务请求针对同一任务对象的锁时,需要按照顺序排队等锁,效率较低的问题,当存在锁冲突时,可以根据任务优先级进行锁抢占,使优先级高的任务可以先持有锁,不必排队等锁,提高重要数据生产链路的工作效率。
图1是根据一示例性实施例示出的一种加锁方法的流程图,如图1所示,加锁方法用于电子设备中,由配置于电子设备中的处理器来执行,该方法包括以下步骤。
在步骤S11中,针对第一任务的任务对象,发起锁请求。
其中,第一任务指待执行的数据读写任务,具体的第一任务可以是一条SQL语句;任务对象是指数据读写任务需要读或者写的数据对象,示例性的,任务对象为数据读写任务时需要读取的表或者分区。
本实施例中,为了避免数据读写任务并发执行,导致数据不安全的问题,第一任务在执行前需要对第一任务对应的任务对象加锁。因此,在执行第一任务之前,首先针对第一任务的任务对象,发起锁请求。其中,第一任务的任务对象为至少一个。
示例性的,第一任务为SQL语句“SELECT*FROM T1,T3 where T1.userid=T3.userid”,即需要对表T1和表T3进行联合查询,在第一任务执行之前,首先要确定第一任务的任务对象,在本示例中,任务对象即为表T1和表T3,为了保证读取到的数据为准确数据,在上述任务在执行之前,需要对表T1和表T3发起锁请求,也就是说保证在该任务读取数据期间,其它任务不能对这两个表进行修改。
在步骤S12中,当存在针对任务对象的冲突锁时,则获取第一任务的第一任务画像和持有冲突锁的第二任务的第二任务画像,其中,任务画像包含表征任务优先级的特征。
其中,第一任务针对任务对象发起锁请求时,该任务对象已经被其它任务锁定,即其它任务已经持有了该任务对象的锁,则将当前任务对象的锁作为冲突锁。示例性的,第一任务针对表T1和表T3发起锁请求,但此时检测到表T1已经被任务A锁定,则认为任务A持有的针对表T1的锁为冲突锁。任务画像用于描述任务的基本信息,任务画像可以包含任务标识、任务优先级等任务的基本信息。
本实施例中,存在针对任务对象的冲突锁,则说明第一任务当前无法持有对应任务对象的锁,一般情况下需要按顺序等锁,即按照请求顺序排队持有任务对象的锁,为了使重要任务能够先持有锁,本实施例中设计了锁抢占方案。为了判断第一任务是否可以针对任务对象进行抢占,需要获取第一任务对应的第一任务画像和持有冲突锁的第二任务对应的第二任务画像,其中,任务画像中包含了能够表征任务优先级的特征。获取到第一任务和持有冲突锁的任务的任务画像后,可以根据二者任务画像中的表征任务优先级的特征,确定第一任务是否能够抢占当前持有冲突锁的任务持有的冲突锁。
示例性的,第一任务对应的任务对象为分区A和分区B,在第一任务执行之前,如果已经有其他任务对至少一个任务对象加锁,则将其他任务对任务对象加的锁作为冲突锁,即其它任务对分区A或者分区B加的锁即为冲突锁。
在步骤S13中,当第一任务的优先级高于第二任务的优先级时,根据第一任务变更任务对象的锁信息。
本实施例中,当从第一任务的第一任务画像和持有持有冲突锁的第二任务的第二任务画像中,读取到第一任务的优先级高于第二任务的优先级时,第一任务可以在第二任务结束之前,优先持有针对当前任务对象的锁,即第一任务能够进行锁抢占,具体的锁抢占方式为根据第一任务变更任务对象的锁信息。
示例性的,从第一任务画像中读取到第一任务的任务优先级为1,其对应的任务对象为表T1,但此时表T1已经被任务优先级为3的任务A锁定,此时,第一任务可以进行锁抢占。其中,任务优先级高低与数值大小呈反比,例如,任务优先级从1-5依次降低。
本公开实施例的技术方案,首先针对第一任务的任务对象,发起锁请求,当存在针对任务对象的冲突锁时,则获取第一任务的第一任务画像和持有冲突锁的第二任务的第二任务画像,当第一任务的优先级高于第二任务的优先级时,根据第一任务变更任务对象的锁信息,解决了在多个任务请求针对同一任务对象的锁时,需要按照顺序排队等锁,效率较低的问题,当存在冲突锁时,可以根据任务优先级进行锁抢占,使优先级高的任务可以先持有锁,不必排队等锁,提高重要数据生产链路的工作效率。
图2是根据一示例性实施例示出的一种加锁方法的流程图,本实施例是对上述技术方案的进一步细化,本实施例中的技术方案可以与上述一个或者多个实施例中的各个可选方案结合。如图2所示,加锁方法包括如下步骤。
在步骤S21中,针对第一任务的任务对象,发起锁请求。
在步骤S22中,遍历已有锁的锁信息存储路径,其中,锁信息存储路径中包括任务对象的标识字段。
其中,锁信息存储在分布式应用程序协调服务Zookeeper中,示例性的,锁信息存储路径格式为/PARENT/{db}/{table}/{partition},任务对象标识字段可以是被锁定的表名或者分区,其中,table表示加锁的表名,partition表示加锁的分区。
本实施例中,在确定第一任务的任务对象后,需要向任务对象发起锁请求,为了确定是否存在针对该任务对象的冲突锁,需要在Zookeeper中查找是否存在包含当前任务对象标识(可以是以表为单位的任务对象标识,也可以是以分区为单位的任务对象标识)的锁信息存储路径,以确定是否存在针对当前任务对象的冲突锁。
在步骤S23中,当锁信息存储路径中存在任务对象的标识时,确定存在针对任务对象的冲突锁。可以看出,包含任务对象的标识的锁信息存储路径为冲突锁的锁信息存储路径。
本实施例中,当遍历到一个锁信息存储路径中存在任务对象的标识时,则确定当前任务对象已经被其他任务锁定,即存在冲突锁,进一步的,遍历到的包含任务对象的标识的锁信息存储路径,即为冲突锁的锁信息存储路径,根据该锁信息存储路径可以查找到冲突锁的锁信息。
示例性的,确定第一任务对应的任务对象为表T1的分区01,在Zookeeper中查询是否存在包含表T1的分区01的锁信息存储路径,若存在一个锁信息存储路径为/PARENT/{db}/{T1}/{01},则表明当前分区已经被其他任务锁定,则存在针对当前任务对象的冲突锁,上述路径即为冲突锁的锁信息存储路径。
在步骤S24中,根据冲突锁的锁信息存储路径,读取冲突锁的锁信息,锁信息中包含持有冲突锁的第二任务的任务画像存储路径。
本实施例中,在查询到冲突锁的锁信息存储路径后,根据锁信息存储路径,读取冲突锁的锁信息,其中,锁信息中包含冲突锁所属的第二任务的任务画像存储路径。示例性的,锁信息中存储的第二任务的任务画像存储路径,具体为/PARENT/{queue}/{queryid},可以根据该任务画像存储路径查找第二任务的第二任务画像。
在步骤S25中,根据第二任务的任务画像存储路径,获取第二任务的第二任务画像。
本实施例中,从锁信息中获取第二任务的任务画像路径后,根据该任务画像路径获取第二任务的任务画像,最终从任务画像中读取第二任务对应的的任务优先级。
在步骤S26中,当第一任务的优先级高于第二任务的优先级时,根据第一任务的任务标识和任务画像存储路径,更新任务对象的锁信息中的任务画像存储路径和任务标识。
本实施例中,在获取到第二任务的优先级后,对第一任务和第二任务的优先级进行比较,当第一任务的任务优先级高于冲突锁所属第二任务的优先级时,确定第一任务可以对任务对象进行锁抢占。一个实施例中,抢占过程可以是:持有冲突锁的第二任务释放针对任务对象的锁,此时,与第二任务对应的锁信息会被删除,然后生成与第一任务对应的锁信息。具体的,根据第一任务的任务标识和任务画像的存储路径,生成新的锁信息,即新的锁信息中包含第一任务的任务标识、以及任务画像存储路径。示例性的,任务标识可以是QueryID,任务画像存储路径为第一任务的任务画像在Zookeeper中的存储路径。在完成锁信息更新后,还可以返回执行步骤S22,以判断第一任务是否可以对其涉及的其他任务对象进行锁抢占,直至完成对所有任务对象的判断。
示例性的,当获取到第一任务的任务优先级为2,冲突锁所属的第二任务的任务优先级为3,显然,第一任务的任务优先级较高,此时,第一任务可以进行锁抢占,即先持有当前任务对象的锁,在第一任务完成并释放锁之后,再由其他任务持有针对当前任务对象的锁。
本公开实施例的技术方案,首先针对第一任务的任务对象发起锁请求,然后遍历已有锁的锁信息存储路径,当锁信息存储路径中存在任务对象的标识时,确定存在针对任务对象的冲突锁,进一步的,根据冲突锁的锁信息存储路径,读取冲突锁的锁信息,根据锁信息中的第二任务的任务画像存储路径,获取第二任务的第二任务画像,当第一任务的优先级高于第二任务的优先级时,根据第一任务的任务标识和任务画像存储路径,更新任务对象的锁信息中的任务画像存储路径和任务标识,可以根据任务优先级进行锁抢占,使优先级高的任务可以先持有锁,提高重要的数据生产链路的工作效率。
图3是根据一示例性实施例示出的一种加锁方法的流程图,本实施例是对上述技术方案的进一步细化,本实施例中的技术方案可以与上述一个或者多个实施例中的各个可选方案结合。如图3所示,加锁方法包括如下步骤。
在步骤S31中,针对第一任务的任务对象,发起锁请求。
可选的,锁请求包括请求加锁的锁类型。
本可选的实施例中,请求加锁的锁类型是根据第一任务的类型确定的,具体的,当第一任务为读任务时,请求加锁的锁类型为读锁,当第一任务为写任务时,请求加锁的锁类型为写锁。
示例性的,若第一任务为SQL语句“SELECT*FROM T1,T3 where T1.userid=T3.userid”,即第一任务为读任务,此时请求加锁的锁类型为读锁,任务对象为表T1和表T3,若第一任务为SQL语句“INSERT INTO T1 VALUES(‘A’,‘B’,‘C’)”,此时锁类型为写锁,任务对象为表T1。
在步骤S32中,当锁请求的锁类型为写锁,且冲突锁的锁类型为读锁时,根据第一任务变更任务对象的锁信息。
本实施例中,提供了另一种判断是否进行锁抢占的方式,在获取到锁请求的锁类型和冲突锁的锁类型后,基于锁类型优先级确定是否进行锁抢占,具体为,写锁的优先级高于读锁,当冲突锁的锁类型为读锁,且第一任务的锁请求的锁类型是写锁时,第一任务可以进行锁抢占,锁抢占方式仍然是根据第一任务变更任务对象的锁信息,具体为根据第一任务的任务标识和任务画像存储路径,更新任务对象的锁信息中的任务画像存储路径和任务标识。
在步骤S33中,将第一任务的第一任务画像,加入至持有冲突锁的第二任务的第二任务画像中,并显示更新后的第二任务画像。
本实施例中,在第一任务进行锁抢占时,将第一任务的第一任务画像添加至持有冲突锁的第二任务的第二任务画像中,可以使得第二任务能够获取第一任务的基本信息(QueryID以及任务优先级等),并且将更新后的第二任务画像打印至前台,使开发者能够直观的了解到第二任务持有的锁被第一任务抢占以及抢占锁的第一任务的基本信息。
在步骤S34中,当第一任务持有全部任务对象对应的锁时,开始执行第一任务。
本实施例中,在第一任务进行锁抢占后,进一步判断其是否持有全部任务对象对应的锁,只有当持有全部任务对象对应的锁后,才能开始执行第一任务。
示例性的,第一任务为SQL语句“SELECT*FROM T1,T3 where T1.userid=T3.userid”,该任务对应的任务对象为表T1和表T3,只有第一任务持有T1和T3的锁后,才能开始执行。
本公开实施例的技术方案,首先针对第一任务的任务对象发起锁请求,当锁请求的锁类型为写锁,且冲突锁的锁类型为读锁时,根据第一任务变更任务对象的锁信息,进一步的,将第一任务的第一任务画像,加入至持有冲突锁的第二任务的第二任务画像中,并显示更新后的第二任务画像,当第一任务持有全部任务对象对应的锁时,开始执行第一任务,一方面,可以根据锁类型进行锁抢占,使请求加锁为写锁的任务可以先持有锁,提高重要的数据生产链路的工作效率,另一方面,将第一任务加入至持有冲突锁的第二任务的第二任务画像中,使得被抢占锁的第二任务能够直观获取抢占锁的第一任务的基本信息。
图4是根据一示例性实施例示出的一种加锁装置框图。参照图4,该装置包括锁请求发起模块410,任务画像获取模块420和锁信息变更模块430。
锁请求发起模块410,用于针对第一任务的任务对象,发起锁请求;
任务画像获取模块420,用于当存在针对所述任务对象的冲突锁时,则获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像,其中,任务画像包含表征任务优先级的特征;
锁信息变更模块430,用于当所述第一任务的优先级高于第二任务的优先级时,根据所述第一任务变更所述任务对象的锁信息。
在本公开实施例的一个实施方式中,可选的,所述锁请求包括请求加锁的锁类型;
所述加锁装置,还用于:
当所述锁请求的锁类型为写锁,且所述冲突锁的锁类型为读锁时,根据所述第一任务变更所述任务对象的锁信息。
在本公开实施例的一个实施方式中,可选的,所述加锁装置,还包括:
存储路径遍历模块,用于获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像之前,遍历已有锁的锁信息存储路径,其中,所述锁信息存储路径中包括任务对象的标识字段;
冲突锁确定模块,用于当所述锁信息存储路径中存在所述任务对象的标识时,确定存在针对所述任务对象的冲突锁。
在本公开实施例的一个实施方式中,可选的,所述任务画像获取模块420,包括:
锁信息读取单元,用于根据所述冲突锁的锁信息存储路径,读取所述冲突锁的锁信息,所述锁信息中包含持有冲突锁的第二任务的任务画像存储路径;
任务画像获取单元,用于根据所述第二任务的任务画像存储路径,获取所述第二任务的第二任务画像。
在本公开实施例的一个实施方式中,可选的,所述锁信息变更模块,具体用于:
根据所述第一任务的任务标识和任务画像存储路径,更新所述任务对象的锁信息中的任务画像存储路径和任务标识。
在本公开实施例的一个实施方式中,可选的,所述加锁装置,还包括:
任务画像加入模块,用于在根据所述第一任务变更所述任务对象的锁信息之后,将所述第一任务的第一任务画像,加入至持有冲突锁的第二任务的第二任务画像中;
任务画像显示模块,用于显示更新后的第二任务画像。
在本公开实施例的一个实施方式中,可选的,所述加锁装置,还包括:
任务执行模块,用于在根据所述第一任务变更所述任务对象的锁信息之后,当所述第一任务持有全部任务对象对应的锁时,开始执行所述第一任务。
关于上述实施例中的加锁装置,其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图5是根据一示例性实施例示出的一种电子设备的结构示意图,如图5所示,该电子设备包括:
一个或多个处理器510,
图5中以一个处理器510为例;
存储器520;
所述设备中的处理器510和存储器520可以通过总线或者其他方式连接,图5中以通过总线连接为例。
存储器520作为一种非暂态计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本公开实施例中的一种加锁方法对应的程序指令/模块(例如,附图4所示的锁请求发起模块410,任务画像获取模块420和锁信息变更模块430)。处理器510通过运行存储在存储器520中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述方法实施例的一种加锁方法,即:
针对第一任务的任务对象,发起锁请求;
当存在针对所述任务对象的冲突锁时,则获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像,其中,任务画像包含表征任务优先级的特征;
当所述第一任务的优先级高于第二任务的优先级时,根据所述第一任务变更所述任务对象的锁信息。
存储器520可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器520可以包括高速随机存取存储器,还可以包括非暂态性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态性固态存储器件。在一些实施例中,存储器520可选包括相对于处理器510远程设置的存储器,这些远程存储器可以通过网络连接至终端设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
在示例性实施例中,还提供了一种包括指令的存储介质,例如包括指令的存储器520,上述指令可由电子设备的处理器510执行以完成上述方法。可选地,存储介质可以是非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种计算机程序产品,用于与电子设备结合使用,所述计算机程序产品包括计算机可读存储介质和内嵌于其中的计算机程序机制,经由计算机载入该程序并执行后能够实现如本公开任一实施例所述的加锁方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种加锁方法,其特征在于,所述方法包括:
针对第一任务的任务对象,发起锁请求;
当存在针对所述任务对象的冲突锁时,则获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像,其中,任务画像包含表征任务优先级的特征;
当所述第一任务的优先级高于第二任务的优先级时,根据所述第一任务变更所述任务对象的锁信息。
2.根据权利要求1所述的方法,其特征在于,所述锁请求包括请求加锁的锁类型;
所述加锁方法,还包括:
当所述锁请求的锁类型为写锁,且所述冲突锁的锁类型为读锁时,根据所述第一任务变更所述任务对象的锁信息。
3.根据权利要求1所述的方法,其特征在于,获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像之前,还包括:
遍历已有锁的锁信息存储路径,其中,所述锁信息存储路径中包括任务对象的标识字段;
当所述锁信息存储路径中存在所述任务对象的标识时,确定存在针对所述任务对象的冲突锁。
4.根据权利要求3所述的方法,其特征在于,获取持有冲突锁的第二任务的第二任务画像,包括:
根据所述冲突锁的锁信息存储路径,读取所述冲突锁的锁信息,所述锁信息中包含持有冲突锁的第二任务的任务画像存储路径;
根据所述第二任务的任务画像存储路径,获取所述第二任务的第二任务画像。
5.根据权利要求1或2所述的方法,其特征在于,根据所述第一任务变更所述任务对象的锁信息包括:
根据所述第一任务的任务标识和任务画像存储路径,更新所述任务对象的锁信息中的任务画像存储路径和任务标识。
6.根据权利要求1所述的方法,其特征在于,在根据所述第一任务变更所述任务对象的锁信息之后,还包括:
将所述第一任务的第一任务画像,加入至持有冲突锁的第二任务的第二任务画像中;
显示更新后的第二任务画像。
7.根据权利要求1所述的方法,其特征在于,在根据所述第一任务变更所述任务对象的锁信息之后,还包括:
当所述第一任务持有全部任务对象对应的锁时,开始执行所述第一任务。
8.一种加锁装置,其特征在于,所述加锁装置包括:
锁请求发起模块,用于针对第一任务的任务对象,发起锁请求;
任务画像获取模块,用于当存在针对所述任务对象的冲突锁时,则获取所述第一任务的第一任务画像和持有所述冲突锁的第二任务的第二任务画像,其中,任务画像包含表征任务优先级的特征;
锁信息变更模块,用于当所述第一任务的优先级高于第二任务的优先级时,根据所述第一任务变更所述任务对象的锁信息。
9.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行命令的存储器;
其中,所述处理器被配置为执行所述命令,以实现如权利要求1至7中任一项所述的加锁方法。
10.一种存储介质,当所述存储介质中的命令由服务器的处理器执行时,使得服务器能够执行如权利要求1至7中任一项所述加锁方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011135028.8A CN114385621A (zh) | 2020-10-21 | 2020-10-21 | 一种加锁方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011135028.8A CN114385621A (zh) | 2020-10-21 | 2020-10-21 | 一种加锁方法、装置、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114385621A true CN114385621A (zh) | 2022-04-22 |
Family
ID=81193168
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011135028.8A Pending CN114385621A (zh) | 2020-10-21 | 2020-10-21 | 一种加锁方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114385621A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115951844A (zh) * | 2023-03-13 | 2023-04-11 | 浪潮电子信息产业股份有限公司 | 分布式文件系统的文件锁管理方法、设备及介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040034642A1 (en) * | 2002-08-15 | 2004-02-19 | Microsoft Corporation | Priority differentiated subtree locking |
CN101196829A (zh) * | 2007-12-27 | 2008-06-11 | 电子科技大学 | 协同编辑中数据冲突模块的加锁方法 |
CN101499041A (zh) * | 2009-03-17 | 2009-08-05 | 成都优博创技术有限公司 | 一种避免主机在访问共享设备造成异常死锁的方法 |
CN102541642A (zh) * | 2011-12-30 | 2012-07-04 | 中国科学院软件研究所 | 一种增强实时性能的任务管理方法 |
CN102945154A (zh) * | 2012-10-18 | 2013-02-27 | 拓维信息系统股份有限公司 | 工作流执行中的资源冲突消解方法 |
CN109800062A (zh) * | 2018-12-25 | 2019-05-24 | 星环信息科技(上海)有限公司 | 一种分布式数据库事务处理系统 |
-
2020
- 2020-10-21 CN CN202011135028.8A patent/CN114385621A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040034642A1 (en) * | 2002-08-15 | 2004-02-19 | Microsoft Corporation | Priority differentiated subtree locking |
CN101196829A (zh) * | 2007-12-27 | 2008-06-11 | 电子科技大学 | 协同编辑中数据冲突模块的加锁方法 |
CN101499041A (zh) * | 2009-03-17 | 2009-08-05 | 成都优博创技术有限公司 | 一种避免主机在访问共享设备造成异常死锁的方法 |
CN102541642A (zh) * | 2011-12-30 | 2012-07-04 | 中国科学院软件研究所 | 一种增强实时性能的任务管理方法 |
CN102945154A (zh) * | 2012-10-18 | 2013-02-27 | 拓维信息系统股份有限公司 | 工作流执行中的资源冲突消解方法 |
CN109800062A (zh) * | 2018-12-25 | 2019-05-24 | 星环信息科技(上海)有限公司 | 一种分布式数据库事务处理系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115951844A (zh) * | 2023-03-13 | 2023-04-11 | 浪潮电子信息产业股份有限公司 | 分布式文件系统的文件锁管理方法、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20090300017A1 (en) | Transaction Parallel Control Method, and Database Managemet System | |
CN108108463B (zh) | 基于时间片调度的同步任务处理方法及装置 | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
US8190857B2 (en) | Deleting a shared resource node after reserving its identifier in delete pending queue until deletion condition is met to allow continued access for currently accessing processor | |
CN114385621A (zh) | 一种加锁方法、装置、设备及介质 | |
WO2016116013A1 (zh) | 软件升级方法和系统 | |
CN112015595B (zh) | 主从数据库的切换方法、计算设备及存储介质 | |
CN112433669A (zh) | 一种分布式存储卷在线迁移的方法、系统、设备及介质 | |
CN109582386B (zh) | 服务启动处理方法、装置、电子设备及可读存储介质 | |
CN108446144B (zh) | 一种应用程序启动方法、装置、终端及存储介质 | |
CN115858123A (zh) | 一种多线程任务调度处理方法 | |
CN106371867B (zh) | 金融设备软件更新方法及系统 | |
JP2019125100A (ja) | 情報処理装置、制御方法、及び制御プログラム | |
CN111399753B (zh) | 写入图片的方法和装置 | |
CN109901933B (zh) | 业务系统的操作方法及装置、存储介质、电子装置 | |
CN111261206B (zh) | 一种读写方法、装置和电子设备及可读存储介质 | |
CN110909012B (zh) | 数据库对象的封锁方法、装置、设备和存储介质 | |
CN113312412A (zh) | 一种统计数据的获取方法、装置、电子设备及存储介质 | |
JP2017201486A (ja) | 情報処理装置、情報処理プログラム、及び情報処理方法 | |
CN111405015A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN112416977B (zh) | 应用于数据库的数据传输的方法、装置和设备 | |
WO2023103752A1 (zh) | 网元版本下载方法、网元、电子设备和存储介质 | |
CN111400324B (zh) | 一种锁定云存储中对象的方法、装置及服务器 | |
CN113486035B (zh) | 数据记录批处理方法、装置、存储介质及电子设备 | |
US9847919B2 (en) | Data network device discovery optimization to reduce data transfer volume |
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 |