一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种线程锁管理系统、方法、设备和可读介质与流程

2022-05-26 15:21:03 来源:中国专利 TAG:


1.本发明涉及资源调度领域,尤其涉及一种线程锁管理系统、方法、设备和可读介质。


背景技术:

2.对于代码段或资源访问,大多会使用线程锁来避免同时访问,当程序十分庞大或对象数量较多时,会有相当多的地方使用线程锁,锁频繁的创建和销毁会带来性能损耗,特别是如果每个对象内置一个锁会有较高的内存占用。
3.申请号为202011039645 .8的专利文献公开了通过对象锁保护资源的方法和装置。该方法的一具体实施方式包括:响应于接收到对目标资源的访问请求,为目标资源的值关联一个新对象锁,并初始化新对象锁的属性信息,其中,属性信息包括:同步计数器、重入次数、持有锁的线程id;查询锁池中是否存在目标资源,其中,锁池中存储了资源和对象锁的对应关系;若存在,则获取锁池中目标资源的对象锁的属性信息;若访问目标资源的线程的id与所获取的属性信息中持有锁的线程id一致,则对象锁的重入次数加1,获得目标资源的对象锁。该实施方式自定义了一种对象锁,实现同一把锁在多线程共享,降低锁的使用复杂度,避免获取不到锁的线程多次循环尝试浪费cpu资源。但是,该方法在运用过程中,即使在同一个代码段中,每次使用都要先获取锁,可能会有额外耗时。且为了防止资源同时访问,只有一个线程拥有锁,因此线程获取锁时要等之前的线程释放锁,如果要多次访问资源,需要重复获取和释放锁,可能涉及频繁创建与销毁对象锁。
4.因此,需要研发一种增加线程锁可复用性,避免锁的频繁创建与销毁,使多线程可管理性更强,开发更加灵活便捷。


技术实现要素:

5.鉴于上述现有技术的不足之处,本发明的目的在于提供一种线程锁管理系统、方法、设备和可读介质,能够增加线程锁的可复用性,避免线程锁的频繁创建与销毁。
6.为了达到上述目的,本发明采取了以下技术方案:一方面,本发明提供一种线程锁管理系统,包括:管理池,具有第一容器和第二容器;所述第一容器用于存储使用中的线程锁,同时存储有编码和线程锁的对应关系;所述第二容器用于存储有多个空白的线程锁;处理单元,用于接收传入的第一编码,若所述第一容器中存在所述第一编码,则调用对应的线程锁;否则从所述第二容器中取出一个线程锁进行调用,并将所述第一编码及对应的线程锁添加到所述第一容器中。
7.进一步的,所述的线程锁管理系统,所述第一容器中还存储线程锁的引用次数;所述处理单元还用于:当线程锁被获取一次时,将所述第一容器中对应的引用次数加1。
8.进一步的,所述的线程锁管理系统,所述处理单元还用于:
当线程锁在使用完毕后,将线程锁释放;当线程锁被释放一次时,对应的引用次数减1。
9.进一步的,所述的线程锁管理系统,当线程锁的引用次数为0时,解除所述第一容器中对应线程锁与编码的对应关系,并将对应的线程锁转输到所述第二容器中。
10.进一步的,所述的线程锁管理系统,若所述第一容器中不存在所述第一编码,且所述第二容器中也没有空白的线程锁,则重新创建新的线程锁调用,并将所述第一编码及所述线程锁添加到所述第一容器中。
11.进一步的,所述的线程锁管理系统,若新调用对应所述第一编码的线程锁的第二线程与当前使用对应所述第一编码的线程锁的第一线程之间不相同时,执行:所述第二线程等待所述第一线程解锁;当所述第一线程对所述线程锁解锁后,所述第二线程执行加锁操作。
12.另一方面,本发明还提供一种适用于前述任一所述的线程锁管理系统的线程锁管理方法,包括:接收传入的第一编码;若所述第一容器中存在所述第一编码,则调用对应的线程锁;所述第一容器存储有编码和线程锁的对应关系;否则从所述第二容器中取出一个线程锁进行调用,并将所述第一编码及对应的线程锁添加到所述第一容器中;所述第二容器存储有多个空白的线程锁。
13.进一步的,所述的线程锁管理方法,所述第一容器中还存储线程锁的引用次数;当线程锁被获取一次时,将所述第一容器中对应的引用次数加1;当线程锁在使用完毕后,将线程锁释放;当线程锁被释放一次时,对应的引用次数减1;当线程锁的引用次数为0时,解除所述第一容器中对应线程锁与编码的对应关系,并将对应的线程锁转输到所述第二容器中。
14.另一方面,本发明还提供一种电子设备,应用前述任一所述的线程锁管理系统。
15.另一方面,本发明还提供一种计算机可读介质,存储有计算机程序,所述计算机程序在被处理器执行时,实现前述任一所述的线程锁管理方法。
16.相较于现有技术,本发明提供的一种线程锁管理系统、方法、设备和可读介质,具有以下有益效果:使用本发明提供的线程锁管理系统,通过第一容器和第二容器分别存储使用中的线程锁和空白的线程锁,当系统需要调用某一线程锁时,优先在第一容器中查询是否有对应第一编码的线程锁在使用,若有则直接调用,若没有则从第二容器中取用一个空白的线程锁进行调用,在调用成功后,则将所述第一编码与该线程锁进行匹配存储到第一容器中,方便后续调用,增加了线程锁的可复用性,避免了线程锁的被重复重建与销毁。
附图说明
17.图1是本发明提供的线程锁管理系统的结构框图。
18.图2是本发明提供的线程锁通过编码进行锁定是的调用逻辑示意图。
19.图3是本发明提供的线程锁针对同一对象锁定时的调用逻辑示意图。
20.图4是本发明提供的线程锁管理方法的流程图。
21.图5是本发明提供的线程锁管理方法的一种实施例流程图。
22.图6是本发明提供的线程锁释放一次的流程图。
具体实施方式
23.为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
24.本领域技术人员应当理解,前面的一般描述和下面的详细描述是本发明的示例性和说明性的具体实施例,不意图限制本发明。
25.本文中术语“包括”,“包含”或其任何其他变体旨在覆盖非排他性包括,使得包括步骤列表的过程或方法不仅包括那些步骤,而且可以包括未明确列出或此类过程或方法固有的其他步骤。同样,在没有更多限制的情况下,以“包含...一个”开头的一个或多个设备或子系统,元素或结构或组件也不会没有更多限制,排除存在其他设备或其他子系统或其他元素或其他结构或其他组件或其他设备或其他子系统或其他元素或其他结构或其他组件。在整个说明书中,短语“在一个实施例中”,“在另一个实施例中”的出现和类似的语言可以但不一定都指相同的实施例。
26.除非另有定义,否则本文中使用的所有技术和科学术语具有与本发明所属领域的普通技术人员通常所理解的相同含义。
27.请参阅图1,本发明提供一种线程锁管理系统,包括:管理池,具有第一容器和第二容器;所述第一容器用于存储使用中的线程锁,同时存储有编码和线程锁的对应关系;所述第二容器用于存储有多个空白的线程锁;具体的,所述空白的线程锁为没有使用的线程锁,在本实施例中,使用两个容器分别存储线程锁,第二容器存储有多个空白的线程锁,即一直保有一定量的线程锁在管理池中,避免频繁的创建和销毁线程锁。
28.处理单元,用于接收传入的第一编码,若所述第一容器中存在所述第一编码,则调用对应的线程锁;否则从所述第二容器中取出一个线程锁进行调用,并将所述第一编码及对应的线程锁添加到所述第一容器中。
29.进一步的,作为优选方案,所述第一编码以及编码优选为自定义编码、资源id、hash值、数据地址中的一种。所述自定义编码可以为一串数字、字符等,所述资源id为所述线程锁锁定的资源的id信息,所述数据地址为所述线程锁锁定的资源的存储地址。
30.在一些实施例中,如图2所示,当线程1进行操作a,线程2进行操作b,但是某一步需要操作a的一个中间结果。则,线程1和线程2先后根据对应的自定义编码获取线程锁1,此时线程1先获取线程锁1并进行加锁,等待线程1把这个中间结果计算出来后对线程锁1解锁,线程2就可以在线程锁1被解锁之后获取到该中间值。
31.使用本发明提供的线程锁管理系统,通过第一容器和第二容器分别存储使用中的线程锁和空白的线程锁,当系统需要调用某一线程锁时,优先在第一容器中查询是否有对应第一编码的线程锁在使用,若有则直接调用,若没有则从第二容器中取用一个空白的线程锁进行调用,在调用成功后,则将所述第一编码与该线程锁进行匹配存储到第一容器中,
方便后续调用,增加了线程锁的可复用性,避免了线程锁的被重复重建与销毁。
32.进一步的,作为优选方案,本实施例中,所述第一容器中还存储线程锁的引用次数;所述处理单元还用于:当线程锁被获取一次时,将所述第一容器中对应的引用次数加1。
33.具体的,本步骤中主要是对使用中的线程锁进行调用操作,无需判定是否为同一线程,只要是正确的请求数据(即带有第一编码的请求数据)进行对线程锁的调用即可。
34.进一步的,一般情况下,调用线程锁的过程是当前一个线程解锁后,就会唤醒后一个等待线程。
35.一些实施例中,在所述线程锁被获取过程中,所述第一容器还会存储线程锁的调用顺序,在线程锁使用过程中,会根据调用顺序进行调用;优选的,所述调用顺序中包括调用该线程锁的线程标识。
36.进一步的,作为优选方案,本实施例中,所述处理单元还用于:当线程锁在使用完毕后,将线程锁释放;当线程锁被释放一次时,对应的引用次数减1。
37.进一步的,作为优选方案,本实施例中,当线程锁的引用次数为0时,解除所述第一容器中对应线程锁与编码的对应关系,并将对应的线程锁转输到所述第二容器中。
38.进一步的,请参阅图3,作为优选方案,本实施例中,若新调用对应所述第一编码的线程锁的第二线程与当前使用对应所述第一编码的线程锁的第一线程之间不相同时,执行:所述第二线程等待所述第一线程解锁;当所述第一线程对所述线程锁解锁后,所述第二线程执行加锁操作。第二线程加锁时等待第一线程解锁,第一线程解锁时唤醒第二线程,第二线程完成加锁;第一线程解锁后如果后续还需要对该线程锁进行加锁操作,可以先不释放锁,在不需要锁之后再释放该线程锁;若后续不再使用该线程锁,则可以释放该线程锁。
39.具体的,当调用顺序中,包括了多个不同线程针对同一线程锁的调用时,需要列后的线程等待前一线程的反馈结果,以此判定前一线程是否使用完毕。这样的好处,是用户可以针对同一资源使用不同的线程按照一定逻辑去使用,不会出现数据冲突,使线程之间交错去调用资源,更加的贴近实际使用场景。
40.具体的,调用逻辑为如图3所示,线程1针对对象a调用了线程锁a,在使用过程中,线程2、3也分别针对对象a调用了线程锁a,则具体的调用过程为:线程1调用线程锁a,然后进行针对对象a的对象操作,结束后解锁并释放锁;在线程1解锁后,线程2即可使用线程锁a,然后针对对象a进行对象操作,结束后解锁并释放锁;在线程2解锁后,线程3即可使用线程锁a,然后针对对象a进行对象操作,结束后可以解锁并释放锁,结束线程锁a的使用,此时,线程锁a被三个线程释放后,变成空白的线程锁,放入到第二容器中。
41.进一步的,作为优选方案,本实施例中,若所述第一容器中不存在所述第一编码,且所述第二容器中也没有空白的线程锁,则重新创建新的线程锁调用,并将所述第一编码及所述线程锁添加到所述第一容器中。
42.优选的,所述第二容器中的空白线程锁数量为第一数量,但是根据系统需求可以
弹性增加到第二数量,当所述第二容器中的线程锁数量到达所述第二数量,则不再增长,节省存储空间。当然,还可以是系统使用线程锁的极限数量的一定百分比,所述极限数量是系统使用过的同时使用的线程锁数量,例如所述极限数量为10000,则第二容器中线程锁的数量优选为2000个。
43.相应的,请参阅图4-6,本发明还提供一种适用于前述任一实施例所述的线程锁管理系统的线程锁管理方法,其特征在于,包括:接收传入的第一编码;若所述第一容器中存在所述第一编码,则调用对应的线程锁;所述第一容器存储有编码和线程锁的对应关系;否则从所述第二容器中取出一个线程锁进行调用,并将所述第一编码及对应的线程锁添加到所述第一容器中;所述第二容器存储有多个空白的线程锁。
44.进一步的,作为优选方案,本实施例中,所述第一容器中还存储线程锁的引用次数;当线程锁被获取一次时,将所述第一容器中对应的引用次数加1;当线程锁在使用完毕后,将线程锁释放;当线程锁被释放一次时,对应的引用次数减1;当线程锁的引用次数为0时,解除所述第一容器中对应线程锁与编码的对应关系,并将对应的线程锁转输到所述第二容器中。
45.相应的,本发明还提供一种电子设备,应用前述任一实施例所述的线程锁管理系统。
46.相应的,本发明还提供一种计算机可读介质,存储有计算机程序,所述计算机程序在被处理器执行时,实现前述任一实施例所述的线程锁管理方法。
47.计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
48.在本技术中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本技术中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。
49.可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献