一种锁的实现方法及相关装置与流程

摘要: 本技术涉及计算机,尤其涉及一种锁的实现方法及相关装置。背景技术:1、在计算机领域,锁是一种抽象的控制结构,用于在并发环境下限制对共享资源的访问权限。当一个线程或...
一种锁的实现方法及相关装置与流程

本技术涉及计算机,尤其涉及一种锁的实现方法及相关装置。

背景技术:

1、在计算机领域,锁是一种抽象的控制结构,用于在并发环境下限制对共享资源的访问权限。当一个线程或进程获取锁后,其他线程/进程必须等待锁释放才能访问锁对应的共享资源,从而避免数据不一致问题。

2、目前,计算机中的锁通常是由软件模块来实现。具体来说,一个线程在申请锁时,如果没有其他线程持有锁,那么线程可以直接获得锁;如果已经有其他线程持有锁,那么线程则进入内核态来阻塞自己,以使得自己进入休眠状态。在线程释放锁时,线程再进入内核态来唤醒下一个等待锁的线程,从而使得下一个线程能够获得锁。

3、然而,这种基于软件模块来实现锁的方式,往往需要限制持有锁的线程和等待锁的线程属于同一个软件实例,导致锁的应用受限。

技术实现思路

1、本技术提供一种锁的实现方法及相关装置,能够提高锁的适用性。

2、第一方面,提供一种锁的实现方法,应用于采用锁来管理共享数据的执行设备上,比如应用于执行设备上运行的锁实现模块。锁的实现方法包括:在第一实例由于需要请求访问目标锁所管理的共享数据而申请目标锁时,锁实现模块将第一信息加入目标队列中,第一信息用于指示第一实例的相关信息,目标队列为位于内存上的硬件队列,且硬件队列是实例通过指令在内存的任意区域上创建的,目标队列用于存储申请目标锁的实例的相关信息。其中,第一实例例如可以为线程、进程或超线程等实体。

3、在第一信息在目标队列中排在目标位置的情况下,第一实例获得目标锁。即,如果第一信息在目标队列中排在目标位置,那么就代表目前没有其他的实例持有目标锁,因此第一实例可以获得目标锁。其中,目标位置例如为目标队列中的首位或末位等位置。

4、在第一实例释放目标锁时,锁实现模块将第一信息从目标队列中删除,以便于其他实例的相关信息能够在目标队列中排在目标位置而继续获得目标锁。

5、本方案中,在实例申请锁时,需要将该实例的相关信息加入到锁对应的硬件队列中,并通过判断实例的相关信息在硬件队列中是否排在目标位置来确认是否获得锁。在实例释放锁时,则将实例的相关信息在硬件队列中删除,以便于其他实例的相关信息能够排在硬件队列的目标位置而获得锁。由于硬件队列是由内存的部分区域所实现的队列,因此各种不同的实例都能够通过访问硬件队列来实现锁的竞争,确保锁的应用不再局域于同一个软件实例内,扩大了锁的应用范围,保证锁能够满足更广泛的应用需求。

6、在一种可能的实现方式中,在锁实现模块将第一信息加入目标队列中之后,且在第一信息在目标队列中并非排在目标位置的情况下,第一实例进入休眠状态。即,由于第一实例无法获得目标锁,第一实例无法继续有效地运行,因此第一实例进入休眠状态,避免无法执行的第一实例继续占据处理资源而造成处理资源浪费。

7、并且,在进入休眠状态预设时长后,第一实例从休眠状态中恢复并确认能否获得目标锁。

8、也就是说,第一实例在进入休眠状态之后,第一实例间隔预设时长就会自动醒来,并检测能否获得目标锁。

9、在一种可能的实现方式中,在第一实例从休眠状态中恢复并确认无法获得目标锁(即目标锁在目标队列中仍未排在目标位置)的情况下,第一实例继续进入休眠状态。如果第一实例从休眠状态中恢复且第一信息在目标队列中已经排在目标位置,那么第一实例就能够获得目标锁。

10、在本方案中,在第一实例基于目标队列确认无法获得目标锁的情况下,第一实例则进入休眠状态并间隔一定时长后自动醒来,以确认当前是否能够获得目标锁,有效地避免了第一实例持续处于无效运行的状态,又能够以简单易实现的方式来确保第一实例后续能够获得目标锁,提高了方案的可实现性。

11、在一种可能的实现方式中,在锁实现模块将第一信息加入目标队列中之后,且在第一信息在目标队列中并非排在目标位置的情况下,第一实例持续检查能否获得目标锁。

12、也就是说,在第一实例未获得目标锁的情况下,第一实例并不会进入休眠状态,而是不停地自旋来查询自身是否能够获得目标锁,以便于在发现自身的信息排在目标队列的目标位置时,及时地获得目标锁。

13、本方案中,在实例无法获得锁的情况下,实例通过不断地自旋来检查能否获得锁,保证实例能够及时地获得锁,避免影响实例的高效运行,适用于要求实例快速响应的场景。

14、在一种可能的实现方式中,在锁实现模块将第一信息加入目标队列中之后,在第一信息在目标队列中并非排在目标位置的情况下,第一实例进入休眠状态并等待目标锁释放。

15、在第二实例释放目标锁时,锁实现模块在目标位置中删除第二信息,并获取目标队列中排在目标位置的第一信息,第一信息用于指示第一实例对应的唤醒对象。基于第一信息,锁实现模块通知唤醒对象唤醒第一实例,以使得第一实例能够获得目标锁。

16、也就是说,针对于申请目标锁的第二实例,锁实现模块也需要将第二信息加入到目标队列中,且第二实例在第一实例之前获得目标锁。那么,在第二实例释放目标锁并且锁实现模块将第二信息从目标队列中删除之后,第一信息就会在目标队列中排在目标位置,此时锁实现模块可以通过访问目标队列来获取到第一信息,进而确定需要唤醒的第一实例对应的唤醒对象。这样一来,锁实现模块可以通过通知第一实例对应的唤醒对象,来唤醒由于需要等待目标锁而处于休眠状态的第一实例,进而保证第一实例能够及时地被唤醒过来。

17、在一种可能的实现方式中,第一实例与第二实例为不同软件实例中的线程。

18、在一种可能的实现方式中,上述第一实例对应的唤醒对象用于唤醒多个实例,第一信息用于指示唤醒对象的地址以及第一实例的标识。

19、本方案中,通过设置一个唤醒对象对应于多个实例,能够实现基于一个唤醒对象来实现多个实例的唤醒,能够有效地降低维护唤醒对象的资源开销。

20、在一种可能的实现方式中,第一实例可以是对应于多个唤醒对象,且第一信息具体用于指示第一实例对应的多个唤醒对象,多个唤醒对象对应于不同的唤醒方式。锁实现模块可以是通知多个唤醒对象中的一个唤醒对象来唤醒第一实例。

21、在一种可能的实现方式中,目标队列用于存储申请多个锁中任意一个锁的实例的相关信息,多个锁包括目标锁。第一实例是在第一信息在目标队列所存储的目标信息中排在目标位置的情况下,获得目标锁。其中,目标信息包括申请目标锁的所有实例的相关信息。

22、即,只要第一实例对应的第一信息在申请目标锁的所有实例的相关信息中排在目标位置,即代表当前没有其他实例持有目标锁,因此第一实例可以获得目标锁。

23、在一种可能的实现方式中,目标队列包括多个队列,第一信息加入到多个队列中的一个队列。

24、第一实例是在第一信息在多个队列所存储的信息中排在目标位置的情况下,获得目标锁。其中,多个队列均具有对应的优先级,第一信息在多个队列所存储的信息中的排位是基于第一信息所处的队列的优先级以及第一信息在所处队列中的位置确定的。

25、第二方面,提供一种锁的实现装置,锁的实现装置包括锁申请模块和处理模块;锁申请模块,用于在第一实例申请目标锁时,将第一信息加入目标队列中,第一信息用于指示第一实例的相关信息,目标队列为位于内存上的硬件队列,且硬件队列是通过指令在内存的任意区域上创建的,目标队列用于存储申请目标锁的实例的相关信息;处理模块,用于在第一信息在目标队列中排在目标位置的情况下,通知第一实例获得目标锁;处理模块,还用于在第一实例释放目标锁时,将第一信息从目标队列中删除。

26、在一种可能的实现方式中,在锁申请模块将第一信息加入目标队列中之后,处理模块,还用于在第一信息在目标队列中并非排在目标位置的情况下,通知第一实例进入休眠状态;其中,在进入休眠状态预设时长后,第一实例从休眠状态中恢复并确认能否获得目标锁。

27、在一种可能的实现方式中,在第一实例从休眠状态中恢复并确认无法获得目标锁的情况下,第一实例继续进入休眠状态。

28、在一种可能的实现方式中,在锁申请模块将第一信息加入目标队列中之后,且在第一信息在目标队列中并非排在目标位置的情况下,第一实例持续检查能否获得目标锁。

29、在一种可能的实现方式中,在锁申请模块将第一信息加入目标队列中之后,在第一信息在目标队列中并非排在目标位置的情况下,第一实例进入休眠状态并等待目标锁释放;处理模块,还用于在第二实例释放目标锁时,在目标位置中删除第二信息,并获取目标队列中排在目标位置的第一信息,第一信息用于指示第一实例对应的唤醒对象;处理模块,还用于基于第一信息,通知唤醒对象唤醒第一实例,以使得第一实例能够获得目标锁。

30、在一种可能的实现方式中,第一实例与第二实例为不同软件实例中的线程。

31、在一种可能的实现方式中,唤醒对象用于唤醒多个实例,第一信息用于指示唤醒对象的地址以及第一实例的标识。

32、在一种可能的实现方式中,第一信息具体用于指示第一实例对应的多个唤醒对象,多个唤醒对象对应于不同的唤醒方式;处理模块,还用于通知多个唤醒对象中的一个唤醒对象来唤醒第一实例。

33、在一种可能的实现方式中,目标队列用于存储申请多个锁中任意一个锁的实例的相关信息,多个锁包括目标锁;第一信息在目标队列所存储的目标信息中排在目标位置,其中目标信息包括申请目标锁的所有实例的相关信息。

34、在一种可能的实现方式中,目标队列包括多个队列,第一信息加入到多个队列中的一个队列;第一信息在多个队列所存储的信息中排在目标位置;其中,多个队列均具有对应的优先级,第一信息在多个队列所存储的信息中的排位是基于第一信息所处的队列的优先级以及第一信息在所处队列中的位置确定的。

35、本技术第三方面提供一种锁的实现装置,可以包括处理器,处理器和存储器耦合,存储器存储有程序指令,当存储器存储的程序指令被处理器执行时实现上述第一方面或第一方面任一实现方式的方法。对于处理器执行第一方面的各个可能实现方式中的步骤,具体均可以参阅第一方面,此处不再赘述。

36、本技术第四方面提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行上述第一方面任一实现方式的方法。

37、本技术第五方面提供了一种电路系统,电路系统包括处理电路,处理电路配置为执行上述第一方面任一实现方式的方法。

38、本技术第六方面提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面任一实现方式的方法。

39、本技术第七方面提供了一种芯片系统,该芯片系统包括处理器,用于实现上述第一方面任一实现方式中所涉及的功能,例如,处理上述方法中所涉及的数据和/或信息。在一种可能的设计中,芯片系统还包括存储器。存储器,用于保存必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包括芯片和其他分立器件。

40、上述第二方面至第七方面的有益效果可以参考上述第一方面的介绍,在此不再赘述。