CN117632528A - 共享资源操作方法、装置、设备及存储介质 - Google Patents
共享资源操作方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN117632528A CN117632528A CN202311667835.8A CN202311667835A CN117632528A CN 117632528 A CN117632528 A CN 117632528A CN 202311667835 A CN202311667835 A CN 202311667835A CN 117632528 A CN117632528 A CN 117632528A
- Authority
- CN
- China
- Prior art keywords
- read
- thread
- write
- lock
- memory resource
- 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 57
- 238000004891 communication Methods 0.000 claims description 7
- 230000004044 response Effects 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 4
- 230000002618 waking effect Effects 0.000 claims description 3
- 230000006870 function Effects 0.000 abstract description 11
- 230000007717 exclusion Effects 0.000 abstract description 10
- 238000010586 diagram Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 2
- 238000011017 operating method Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Multi Processors (AREA)
Abstract
本申请提供一种共享资源操作方法、装置、设备及存储介质。该方法包括:第二虚拟机响应于对所述目标内存资源的操作需求,获取所述读写锁的状态;所述状态用于指示第一虚拟机的第一线程是否正在所述目标内存资源上执行写操作、所述目标内存资源上执行读操作的第一线程数量。根据所述操作需求,以及,所述读写锁的状态,确定所述第二线程能否对所述目标内存资源进行操作。若能,则将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作,从而实现了不同虚拟机的线程通过读写锁进行互斥的功能,避免了虚拟机无法实现预期的内存资源操作的问题。
Description
技术领域
本申请涉及资源操作领域,尤其涉及一种共享资源操作方法、装置、设备及存储介质。
背景技术
随着信息技术的不断发展,虚拟机技术得到广泛应用。虚拟机(Virtual Machine)是指通过软件模拟的、具有完整硬件功能的,运行在一个完全隔离环境中的完整计算机系统。虚拟机可以通过多个线程对共享内存资源进行操作,目前在虚拟机操作共享内存资源时,在虚拟机内部可以利用读写锁对该虚拟机的多个线程进行线程的互斥,以避免多个线程同时操作同样的共享内存资源,导致一个线程写入的数据被另一个线程覆盖。然而,目前存在通过多个虚拟机进行工作的需求,在存在多个具有多个线程的虚拟机的场景下,无法实现通过读写锁对不同虚拟机的线程进行互斥的功能。
因此,如何实现不同虚拟机的线程通过读写锁进行互斥是亟需解决的问题。
发明内容
本申请提供一种共享资源操作方法、装置、设备及存储介质,用以解决现有技术中如何实现多个虚拟机的线程互斥的问题。
第一方面,本申请提供一种共享资源操作方法,目标内存资源具有读写锁,所述读写锁中标记有使用所述目标内存资源的虚拟机列表,以及,所述读写锁中标记的当前授权线程的标识为第一线程的标识,标记的下一授权线程的标识为第二线程的标识;所述第一线程和所述第二线程为不同虚拟机的线程;所述方法应用于所述第二线程所属的第二虚拟机,包括:
响应于对所述目标内存资源的操作需求,获取所述读写锁的状态;所述状态用于指示所述第一线程是否正在所述目标内存资源上执行写操作、所述目标内存资源上执行读操作的第一线程数量;
根据所述操作需求,以及,所述读写锁的状态,确定所述第二线程能否对所述目标内存资源进行操作;
若能,则将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作。
可选的,所述操作需求为读操作,所述将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作,包括:
若所述读写锁的状态表征所述第一线程正在所述目标内存资源上执行写操作,则在所述读写锁的写子锁从锁定状态变为解锁状态后,将所述第二线程锁定在所述读写锁的读子锁中,并通过所述第二线程执行针对所述目标内存资源的读操作;
若所述读写锁的状态表征所述第一线程未在所述目标内存资源上执行写操作,则将所述第二线程锁定在所述读写锁的读子锁中,并通过所述第二线程执行针对所述目标内存资源的读操作。
可选的,所述操作需求为写操作,所述将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作,包括:
若所述读写锁的状态表征所述第一线程正在所述目标内存资源上执行写操作,则在所述读写锁的写子锁从锁定状态变为解锁状态后,将所述第二线程锁定在所述读写锁的写子锁中,并通过所述第二线程执行针对所述目标内存资源的写操作;
若所述读写锁的状态表征所述第一线程未在所述目标内存资源上执行写操作且所述目标内存资源上执行读操作的第一线程数量为0,将所述第二线程锁定在所述读写锁的写子锁中,并通过所述第二线程执行针对所述目标内存资源的写操作。
可选的,在所述获取所述读写锁的状态之前,还包括:
将所述读写锁的访问子锁的解锁状态修改为锁定状态,所述访问子锁用于阻止所述第二线程之外的其他线程获取所述读写锁的状态;
在所述第二线程锁定在所述读写锁后,还包括:
将所述读写锁的访问子锁的锁定状态修改为解锁状态。
可选的,还包括:
若所述操作需求,以及,所述读写锁的状态,判断所述第二线程不能对所述目标内存资源进行操作,则将所述第二线程配置为睡眠状态。
可选的,还包括:
响应于所述虚拟机列表中的第一虚拟机发送的中断请求,唤醒所述第二线程;所述中断请求为在所述第一虚拟机通过所述第一线程针对所述目标内存资源的操作执行完成后、将所述目标内存资源的读写锁从锁定状态修改为解锁状态,并更新所述读写锁中当前授权线程的标识为所述第二线程的标识后发送的;
若所述读写锁为解锁状态,则将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作。
可选的,还包括:
根据所述目标内存资源中的读写锁的名称获取所述读写锁的虚拟机列表,以及,虚拟机权限;
若所述虚拟机列表中包括所述第二虚拟机,且所述虚拟机权限中所述第二虚拟机具备所述操作需求所需的目标权限,则获取所述读写锁的地址,以调用所述读写锁判断是否需要通过所述第二虚拟机中的线程对所述目标内存资源进行所述操作需求对应的操作。
第二方面,本申请提供一种共享资源操作装置,目标内存资源具有读写锁,所述读写锁中标记有使用所述目标内存资源的虚拟机列表,以及,所述读写锁中标记的当前授权线程的标识为第一线程的标识,标记的下一授权线程的标识为第二线程的标识;所述第一线程和所述第二线程为不同虚拟机的线程;所述方法应用于所述第二线程所属的第二虚拟机,包括:
获取模块,用于响应于对所述目标内存资源的操作需求,获取所述读写锁的状态;所述状态用于指示所述第一线程是否正在所述目标内存资源上执行写操作、所述目标内存资源上执行读操作的第一线程数量;
处理模块,用于根据所述操作需求,以及,所述读写锁的状态,确定所述第二线程能否对所述目标内存资源进行操作;
控制模块,用于若能,则将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作。
第三方面,本申请提供一种电子设备,包括:处理器、通信接口,以及存储器;所述处理器分别与所述通信接口和所述存储器通信连接;
所述存储器存储计算机执行指令;
所述通信接口与外部设备进行通信交互;
所述处理器执行所述存储器存储的计算机执行指令,以实现如第一方面中任一项所述的方法。
第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如第一方面中任一项所述的共享资源操作方法。
第五方面,本申请提供一种计算机程序产品,所述计算机程序产品被处理器执行时用于实现如第一方面中任一项所述的共享资源操作方法。
本申请提供的共享资源操作方法、装置、设备及存储介质,第二虚拟机响应于对目标内存资源的操作需求,获取读写锁的状态,第二虚拟机根据操作需求,以及,读写锁的状态,确定第二线程能否对目标内存资源进行操作,若第二线程能对目标内存资源进行操作,则第二虚拟机将读写锁从解锁状态修改为锁定状态,并通过第二线程执行针对目标内存资源的读操作或写操作,从而在实现多个虚拟机的线程对共享内存资源的写操作互斥的同时,还能使多个虚拟机的线程能同时对该共享内存资源执行读操作,提高并发效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请提供的一种内存资源操作的场景示意图;
图2为本申请实施提供的一种共享资源操作方法的场景示意图;
图3为本申请实施例提供的一种共享资源操作方法的流程示意图;
图4为本申请实施例提供的另一种共享资源操作方法的流程示意图;
图5为本申请实施例提供的又一种共享资源操作方法的流程示意图;
图6为本申请实施例提供的一种共享资源操作装置的结构示意图;
图7为本申请实施例提供的一种电子设备的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
为了便于理解,首先对读写锁进行介绍。读写锁(Read-Write Lock)是一种用于多线程编程中的同步机制,它允许一个虚拟机内的多个线程同时对共享内存资源进行读操作,但只允许一个线程进行写操作。读写锁有两个状态:读模式和写模式。读写锁可以通过独子锁实现读模式,通过写子锁实现写模式。当没有该虚拟机内的线程持有写子锁时,该虚拟机内的多个线程可以同时持有读子锁以进行读操作;而当有该虚拟机内的线程持有写子锁时,该虚拟机内的其他线程无法持有读锁或写锁,直到写锁被释放。
读写锁在读操作较多但写操作较少的场景中,由于虚拟机内的多个线程可以同时持有读子锁,读操作不会阻塞其他读操作,从而提高了虚拟机的并发性能。
图1为本申请提供的一种内存资源操作的场景示意图。如图1所示,该场景中包括:内存资源,至少两个虚拟机(虚拟机1,虚拟机2)。
其中,该内存资源上存在该至少两个虚拟机均能够进行操作的共享内存资源,每个虚拟机中存在至少两个能够操作该共享内存资源的线程。每个线程均可以操作该共享内存资源,例如可以读取该共享内存资源中的数据,或者向该共享内存资源中写入数据。
目前仅存在虚拟机内部通过读写锁实现的线程互斥方案,即当虚拟机1操作该共享内存资源时,通过读写锁控制虚拟机1的线程1和/或线程2对该共享内存资源进行读操作,或者,通过读写锁控制虚拟机1的线程1或线程2对该共享内存资源进行写操作,以避免线程1在对该共享内存资源进行写操作时,线程2将线程1写入该共享内存资源的数据覆盖。虚拟机2中的多个线程亦然。
然而,在实际使用中,由于不存在虚拟机之间通过读写锁实现的线程互斥,因此即使对虚拟机1设置了读写锁,当虚拟机1的线程1或者线程2单独对该共享内存资源执行写操作时,虚拟机2也可能会通过其上的线程对该共享内存资源执行写操作,导致虚拟机1写入该共享内存资源的数据会因为虚拟机2的线程同时在对该共享内存资源执行写操作,从而使虚拟机1写入该共享内存资源的数据被虚拟机2写入该共享内存资源的数据覆盖,无法实现预期的内存资源操作。
因此,如何实现不同虚拟机的线程通过读写锁进行互斥是亟需解决的问题。
有鉴于此,本申请提供了一种共享资源操作方法,通过在共享内存资源中构建多个虚拟机可以使用的读写锁,以使在一个时间内能够对该共享内存资源执行写操作的虚拟机线程只能为该读写锁的写子锁锁定的线程,以及,在一个时间内能够对该共享内存资源执行读操作的虚拟机线程可以为该读写锁的读子锁锁定的多个虚拟机的多个线程。从而在实现多个虚拟机的线程对共享内存资源的写操作互斥的同时,还能使多个虚拟机的线程能同时对该共享内存资源执行读操作,提高并发效率。
下面,对本申请实施例的共享资源操作方法的场景进行介绍。图2为本申请实施提供的一种共享资源操作方法的场景示意图。如图2所示,该场景包括:目标内存资源,读写锁,第一虚拟机,第二虚拟机。
其中,该读写锁在该目标内存资源上,该读写锁中包括读子锁和写子锁,锁定读子锁的线程可以是多个(该多个线程可以包括属于第一虚拟机的线程和/或属于第二虚拟机的线程),这些线程能够对目标内存资源执行读操作;在同一时间内仅可以有一个线程能够锁定写子锁,以使该线程能够对目标内存资源执行写操作。
该读写锁中标记有使用该目标内存资源的虚拟机列表,以及,该读写锁中标记的当前授权线程的标识为第一线程的标识,标记的下一授权线程的标识为第二线程的标识。该第一线程为该第一虚拟机的线程,该第二线程为该第二虚拟机的线程。该第一虚拟机/该第二虚拟机为能够读、和/或、写该目标内存资源的虚拟机,其中,该读写锁是通过函数结构实现的,用来保证在任一时刻,只能有一个线程能够对该目标内存资源进行写操作,在没有线程对该目标内存资源进行写操作时,允许多个线程对该目标内存资源进行读操作。
当该写子锁锁定时,即只有该写子锁中标记的当前授权线程能够对该目标内存资源执行写操作,其他线程均处于睡眠状态。当前授权线程完成对目标内存资源的写操作后,解锁该写子锁,并唤醒其他虚拟机的线程,以使第二线程对应的第二虚拟机通过该第二线程对目标内存资源进行写操作。当该读子锁锁定时,其他线程可以继续获取读子锁来读取相同的共享内存资源,即第二线程对应的第二虚拟机可以随时通过该第二线程获取该读子锁,以对目标内存资源进行读操作。
下面,在图2所示的共享资源操作方法的场景下,通过具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图3为本申请实施例提供的一种共享资源操作方法的流程示意图。如图3所示,该方法可以包括:
S301、第二虚拟机响应于对目标内存资源的操作需求,获取读写锁的状态。
其中,该对目标内存资源的操作需求可以是操作指令、或者、指令信息等,用于指示第二虚拟机需要对目标内存资源执行读操作或者写操作。该状态用于指示第一线程是否正在目标内存资源上执行写操作、目标内存资源上执行读操作的第一线程数量,该第一线程为正在对目标内存资源进行操作的线程。
例如,可以通过读写锁的第一参数表征第一线程是否正在目标内存资源上执行写操作,通过读写锁的第二参数表征目标内存资源上执行读操作的第一线程数量。当第一线程正在目标内存资源上执行写操作时,该第一参数为第一值;当第一线程未在目标内存资源上执行写操作时,该第一参数为第二值。当第一线程正在目标内存资源上执行读操作时,该第二参数为该第一线程的数量;当第一线程未在目标内存资源上执行读操作时,该第二参数为0。
该读写锁的状态是第二虚拟机获取该读写锁的参数确定的,例如获取上述所说的第一参数、和/或、第二参数。
S302、第二虚拟机根据操作需求,以及,读写锁的状态,确定第二线程能否对目标内存资源进行操作。
若该操作需求指示第二虚拟机对目标内存资源执行写操作,该读写锁的状态为第一线程未在目标内存资源上执行写操作,且目标内存资源上执行读操作的第一线程数量为0,则确定第二线程能对目标内存资源进行写操作。若该读写锁的状态为第一线程正在目标内存资源上执行写操作、或目标内存资源上执行读操作的第一线程数量不为0,则确定第二线程不能对目标内存资源进行写操作。
若该操作需求指示第二虚拟机对目标内存资源执行读操作,该读写锁的状态为第一线程未在目标内存资源上执行写操作,则确定第二线程能对目标内存资源进行读操作。若该读写锁的状态为第一线程正在目标内存资源上执行写操作,则确定第二线程不能对目标内存资源进行读操作。
S303、若能,则第二虚拟机将读写锁从解锁状态修改为锁定状态,并通过第二线程执行针对目标内存资源的操作。
该读写锁中的读子锁和写子锁的状态均包括锁定状态、解锁状态。若该写子锁的状态为锁定状态,在锁定状态除了锁定该写子锁的第一线程能够对该目标内存资源执行写操作,其他所有需要对该目标内存资源执行写操作或读操作的线程均会被阻塞。若该读子锁的状态为锁定状态,在锁定状态其他所有需要对该目标内存资源执行写操作的线程均会被阻塞。
若读写锁为解锁状态,则第二虚拟机将该第二虚拟机中的所有线程与读写锁中更新后的当前授权线程的标识进行对比,通过与更新后的当前授权线程的标识对应的第二线程将该读写锁锁定,并使其他与更新后的当前授权线程的标识不对应的线程加入等待队列,使其进入睡眠状态,等待下一次被中断请求唤醒。其中,若此时第一线程正在执行读操作,则第二线程为执行写操作的线程;若此时第一线程正在执行写操作,则第二线程可以是执行写操作的线程,也可以是执行读操作的线程。
在第二线程将该读写锁锁定后,该第二线程即可对该目标内存资源执行读操作或写操作。
本申请实施例提供的方法,第二虚拟机响应于对目标内存资源的操作需求,获取读写锁的状态,第二虚拟机根据操作需求,以及,读写锁的状态,确定第二线程能否对目标内存资源进行操作,若第二线程能对目标内存资源进行操作,则第二虚拟机将读写锁从解锁状态修改为锁定状态,并通过第二线程执行针对目标内存资源的读操作或写操作,从而在实现多个虚拟机的线程对共享内存资源的写操作互斥的同时,还能使多个虚拟机的线程能同时对该共享内存资源执行读操作,提高并发效率。
下面,对于前述步骤S303中第二虚拟机如何将读写锁从解锁状态修改为锁定状态,并通过第二线程执行针对目标内存资源的操作进行详细说明。
情况1:操作需求为读操作。
若读写锁的状态表征第一线程正在目标内存资源上执行写操作,则在读写锁的写子锁从锁定状态变为解锁状态后,将第二线程锁定在读写锁的读子锁中,并通过第二线程执行针对目标内存资源的读操作。
以上述步骤S301中的第一参数和第二参数为例,在第一线程针对目标内存资源的写操作执行完成后,第一虚拟机将目标内存资源的读写锁从锁定状态修改为解锁状态,更新该读写锁中当前授权线程的标识,以及,下一授权线程的标识,并将第一参数从第一值修改为第二值。
该第一虚拟机在通过第一线程针对目标内存资源的操作执行完成后,可以通过解锁该读写锁的函数将该写子锁和读子锁从锁定状态修改为解锁状态,更新上述第一参数和第二参数,并向虚拟机列表中的第二虚拟机发送中断请求,以唤醒第二虚拟机中的线程。该函数可以根据实际需求设定,该函数中可以包括指向该读写锁的指针,以将目标内存资源的写子锁和读子锁从锁定状态修改为解锁状态,并更新上述第一参数和第二参数。该中断请求为在该第一虚拟机通过第一线程针对该目标内存资源的写操作执行完成后、将该目标内存资源的读写锁从锁定状态修改为解锁状态,并更新该读写锁中当前授权线程的标识为第二线程的标识后发送的。
第二虚拟机通过对比该第二线程和该读写锁中具备读操作权限的线程列表,确定该第二线程是否具备对目标内存资源执行读操作的权限,若该第二线程为该线程列表中的线程,则表征第二线程具备对目标内存资源执行读操作的权限。第二虚拟机通过将该第二线程锁定在读写锁的读子锁中,以使第二线程能够对目标内存资源执行读操作。
若读写锁的状态表征第一线程未在目标内存资源上执行写操作,无论该第一线程是否正在目标内存资源上执行读操作,均可以将第二线程锁定在读写锁的读子锁中,并通过第二线程执行针对目标内存资源的读操作。在该情况下,第二虚拟机可以直接执行将第二线程锁定在读写锁的读子锁中的步骤,该步骤的实现方式与上一种情况相同,此处不再赘述。
情况2:操作需求为写操作。
若读写锁的状态表征第一线程正在目标内存资源上执行写操作,则在读写锁的写子锁从锁定状态变为解锁状态后,将第二线程锁定在读写锁的写子锁中,并通过第二线程执行针对目标内存资源的写操作。
以上述步骤S301中的第一参数和第二参数为例,在第一线程针对目标内存资源的写操作或读操作执行完成后,第一虚拟机将目标内存资源的读写锁从锁定状态修改为解锁状态,更新该读写锁中当前授权线程的标识,以及,下一授权线程的标识,并将第一参数从第一值修改为第二值(第一线程执行写操作的情况),或,将第二参数的值修改为0(第一线程执行读操作的情况)。
该第一虚拟机在通过第一线程针对目标内存资源的操作执行完成后,可以通过解锁该读写锁的函数将该写子锁和读子锁从锁定状态修改为解锁状态,更新上述第一参数和第二参数,并向虚拟机列表中的第二虚拟机发送中断请求,以唤醒第二虚拟机中的线程。该函数可以根据实际需求设定,该函数中可以包括指向该读写锁的指针,以将目标内存资源的写子锁和读子锁从锁定状态修改为解锁状态,并更新上述第一参数和第二参数。
第二虚拟机通过对比该第二线程和该读写锁中具备写操作权限的线程列表,确定该第二线程是否具备对目标内存资源执行写操作的权限,若该第二线程为该线程列表中的线程,则表征第二线程具备对目标内存资源执行写操作的权限。第二虚拟机通过将该第二线程锁定在读写锁的写子锁中,以使第二线程能够对目标内存资源执行写操作。
若读写锁的状态表征第一线程未在目标内存资源上执行写操作且目标内存资源上执行读操作的第一线程数量为0,将第二线程锁定在读写锁的写子锁中,并通过第二线程执行针对目标内存资源的写操作。在该情况下,第二虚拟机可以直接执行将第二线程锁定在读写锁的写子锁中的步骤,该步骤的实现方式此处不再赘述。
本申请实施例提供的方法,第二虚拟机通过获取读写锁中第一线程对目标内存资源执行操作的情况,确定是否可以将第二虚拟机的第二线程锁定在读写锁中的读子锁或写子锁中,若第二线程能够匹配到该读子锁或写子锁中的线程列表,则第二虚拟机使用第二线程锁定读子锁或写子锁,以使第二线程能够对目标内存资源执行读操作或写操作,从而实现跨虚拟机的读写锁功能。
此外,在第二虚拟机获取读写锁的状态时,需要一定的时间对读写锁的状态进行判断,若此时有其他虚拟机也对读写锁的状态进行判断,则可能会造成多个虚拟机同时要求锁定读写锁的情况。
因此,可选的,在前述步骤S301获取读写锁的状态之前,该方法还可以包括:将读写锁的访问子锁的解锁状态修改为锁定状态。其中,该访问子锁用于阻止第二线程之外的其他线程获取读写锁的状态。该访问子锁例如可以取第三值和第四值,其中第三值表征该访问子锁为锁定状态,第四值表征该访问子锁为解锁状态。
在第二虚拟机进入到获取读写锁的状态时,先获取该访问子锁的状态,若访问子锁的状态为解锁状态,则控制该访问子锁从第四值修改为第三值,此时其他虚拟机若要获取读写锁的状态,检测到访问子锁为锁定状态,就无法获取读写锁的状态,并进入等待队列,从而避免多个虚拟机同时要求锁定读写锁的情况。若访问子锁的状态为锁定状态,则表征当前有其他虚拟机正在获取读写锁的状态,第二虚拟机需要进入等待队列,并使其内的所有线程进入睡眠状态。
在该实现方式下,在第二线程锁定在读写锁后,第二虚拟机还需要将读写锁的访问子锁的锁定状态修改为解锁状态,以使第二虚拟机之后的其他虚拟机能够获取该读写锁的状态,以在第二虚拟机的第二线程对目标内存资源执行操作时,能够获取并判断是否读写锁的状态。
本申请实施例提供的方法,第二虚拟机通过在获取读写锁的状态之前,将读写锁的访问子锁的解锁状态修改为锁定状态,防止其他虚拟机也对读写锁的状态进行判断,避免多个虚拟机同时要求锁定读写锁的情况,从而提高了读写锁的稳定性。
下面,对于前述步骤S303中如何通过第二线程执行针对目标内存资源的操作进行详细介绍。图4为本申请实施例提供的另一种共享资源操作方法的流程示意图。如图4所示,前述步骤S303可以包括:
S401、第二虚拟机从第二虚拟机的线程中查找第二线程。
该第二虚拟机根据该读写锁中更新后的当前授权线程中的标识,在该第二虚拟机的线程中匹配与该标识对应的第二线程,例如可以是遍历该第二虚拟机中的所有线程的标识,将与更新后的当前授权线程中的标识相同的标识对应的线程作为该第二线程。或者,确定该第二虚拟机中能够访问该目标内存资源的线程,从能够操作该目标内存资源的线程中查找该第二线程,在该情况下,在读写锁的虚拟机列表中,还存储有每个虚拟机能够使用该读写锁的线程的信息,例如是这些线程的标识。
S402、第二虚拟机控制第二线程执行针对目标内存资源的操作,并控制第二虚拟机的线程中除该第二线程之外的线程进入睡眠状态。
第二虚拟机控制该第二线程在该目标内存资源上执行资源操作,例如可以是前述所说的读取操作或写入操作。第二虚拟机在查找到该第二线程后,控制除该第二线程之外的线程进入睡眠状态,以等待下一次被中断请求唤醒后,与该读写锁中的当前授权线程的标识进行匹配。
本申请实施例提供的方法,通过第一虚拟机从授权线程的标识列表中确定第二线程的标识的目标更新标识,更新下一授权线程的标识,并通过第二虚拟机从第二虚拟机的线程中查找第二线程,控制第二线程执行针对目标内存资源的操作,并控制第二虚拟机的线程中除该第二线程之外的线程进入睡眠状态,从而实现跨虚拟机的线程互斥功能,避免了虚拟机无法实现预期的内存资源操作的问题。
下面,对于本申请实施例中如何构建上述读写锁进行详细说明。
图5为本申请实施例提供的又一种共享资源操作方法的流程示意图。如图5所示,在通过第一线程针对目标内存资源执行操作之前,该方法还可以包括:
S501、若目标内存资源无读写锁,则第一虚拟机获取使用该目标内存资源的虚拟机列表。
第一虚拟机在访问该目标内存资源时,检测该目标内存资源中是否存在读写锁。若存在读写锁,则将该第一虚拟机添加至该读写锁的虚拟机列表中,并根据目标内存资源中第一虚拟机的读/写权限,确定是否将该第一虚拟机添加至读子锁或写子锁的虚拟机列表中(若第一虚拟机具备读权限,则将该第一虚拟机添加至读子锁的虚拟机列表中,若第一虚拟机具备写权限,则将该第一虚拟机添加至写子锁的虚拟机列表中,若第一虚拟机具备读权限和写权限,则将该第一虚拟机添加至读子锁和写子锁的虚拟机列表中)。若不存在读写锁,则表征该第一虚拟机为第一个访问该目标内存资源的虚拟机,需要在该目标内存资源中创建该目标内存资源的读写锁,以防止后续有多个虚拟机访问该目标内存资源时多个线程同时对该目标内存资源进行操作,产生资源覆盖的问题。
第一虚拟机可以从该目标内存资源中获取所有具备访问该目标内存资源的权限的虚拟机列表,或者,响应于用户操作获取所有具备操作该目标内存资源的权限的虚拟机列表。例如,可以获取具备访问该目标内存资源的权限的虚拟机的标识,根据这些标识构建该虚拟机列表,以及,可以获取具备访问该目标内存资源的权限(写权限和读权限)的虚拟机的标识,根据这些标识构建写子锁或读子锁的虚拟机列表。或者,该目标内存资源中预先存储有具备访问该目标内存资源的权限的虚拟机列表,该第一虚拟机可以直接获取该虚拟机列表。
S502、第一虚拟机根据虚拟机列表、线程列表,在目标内存资源中创建并初始化读写锁。
创建该读写锁包括创建该读写锁的名称,在该读写锁的结构中创建该虚拟机列表,创建用于存储该读写锁中标记的当前授权线程的标识的变量,以及,创建用于存储该读写锁中标记的下一授权线程的标识的变量。示例性的,该读写锁的数据结构可以如下所示:
struct vm_rw_lock{
char name[32];
u54 vm_bitmap;
u54 write_bitmap;
u54 read_bitmap;
u32 change_lock;
bool write_flag;
u32 read_cnt;
}
其中,name为该读写锁的名称,可以是第一虚拟机在创建该读写锁时根据实际需求传入的。该vm_bitmap为该读写锁的虚拟机列表,在该虚拟机列表中存储有能够使用该读写锁的虚拟机组成的列表,以及,每个虚拟机能够使用该读写锁的线程的标识。示例性的,可以在该vm_bitmap中的每个bit中存储能够使用该读写锁的虚拟机,例如以二进制进行表示为例,从最低位开始,每一个bit为1时对应一个虚拟机,如0b1的1对表征第一虚拟机,如0b11中的第一个1表征第一虚拟机,第二个1表征第二虚拟机,如0b111中的第一个1表征第一虚拟机,第二个1表征第二虚拟机,第三个1表征第三虚拟机等。该onwer表征该读写锁中标记的当前授权线程的标识的变量,该next表征该读写锁中标记的下一授权线程的标识的变量。write_bitmap为写子锁的虚拟机列表,read_bitmap为读子锁的虚拟机列表。
该第一虚拟机根据实际需求,例如响应于用户的操作,指定该读写锁的名称name,以及,该读写锁的虚拟机列表vm_bitmap。第一虚拟机调用该目标内存资源的接口,在该目标内存资源中创建如上述数据结构的读写锁的结构体,并将该指定的name和vm_bitmap初始化至该结构体中。
此外,change_lock表征该读写锁的访问子锁,write_flag表征当前是否有线程正在执行写操作(即锁定在写子锁上),read_cnt表征当前正在执行读操作(即锁定在读子锁上)的线程数量。
本申请实施例提供的方法,通过在目标内存资源上创建能够供多个虚拟机使用的读写锁,以对具备目标内存资源的访问权限的多个虚拟机的线程进行管理,以使同一时刻只有一个线程可以对该目标内存资源执行写操作,且在没有线程执行写操作时,可以支持多个线程在同一时刻对该目标内存资源执行读操作,从而在实现多个虚拟机的线程对共享内存资源的写操作互斥的同时,还能使多个虚拟机的线程能同时对该共享内存资源执行读操作,提高并发效率。
如图5所示的方法中所构建的读写锁,可选的,第二虚拟机还可以根据目标内存资源中的读写锁的名称获取读写锁的虚拟机列表,以及,虚拟机权限。即根据上述图5示例中的name,获取该读写锁的结构体,从而从该结构体重获取vm_bitmap、write_bitmap、以及read_bitmap。
若虚拟机列表中包括该第二虚拟机,且虚拟机权限中第二虚拟机具备操作需求所需的目标权限(即读权限或写权限),则获取读写锁的地址,以调用读写锁判断是否需要通过第二虚拟机中的线程对目标内存资源进行操作需求对应的操作。
例如,若虚拟机列表中包括该第二虚拟机,且虚拟机权限中第二虚拟机具备操作需求所需的读权限,则可以获取该读写锁的地址,以调用读写锁判断是否需要通过第二虚拟机中的线程对目标内存资源进行读操作。或者,若虚拟机列表中包括该第二虚拟机,且虚拟机权限中第二虚拟机具备操作需求所需的写权限,则可以获取该读写锁的地址,以调用读写锁判断是否需要通过第二虚拟机中的线程对目标内存资源进行写操作。
图6为本申请实施例提供的一种共享资源操作装置的结构示意图。如图6所示,目标内存资源具有读写锁,该读写锁中标记有使用该目标内存资源的虚拟机列表,以及,该读写锁中标记的当前授权线程的标识为第一线程的标识,标记的下一授权线程的标识为第二线程的标识。该第一线程和该第二线程为不同虚拟机的线程。该装置应用于该第二线程所属的第二虚拟机,该装置可以包括:获取模块11,处理模块12,控制模块13。
获取模块11,用于响应于对该目标内存资源的操作需求,获取该读写锁的状态。该状态用于指示该第一线程是否正在该目标内存资源上执行写操作、该目标内存资源上执行读操作的第一线程数量。
处理模块12,用于根据该操作需求,以及,该读写锁的状态,确定该第二线程能否对该目标内存资源进行操作。
控制模块13,用于若能,则将该读写锁从解锁状态修改为锁定状态,并通过该第二线程执行针对该目标内存资源的操作。
可选的,若该操作需求为读操作,控制模块13,具体用于若该读写锁的状态表征该第一线程正在该目标内存资源上执行写操作,则在该读写锁的写子锁从锁定状态变为解锁状态后,将该第二线程锁定在该读写锁的读子锁中,并通过该第二线程执行针对该目标内存资源的读操作。若该读写锁的状态表征该第一线程未在该目标内存资源上执行写操作,则将该第二线程锁定在该读写锁的读子锁中,并通过该第二线程执行针对该目标内存资源的读操作。
可选的,若该操作需求为写操作,控制模块13,具体用于若该读写锁的状态表征该第一线程正在该目标内存资源上执行写操作,则在该读写锁的写子锁从锁定状态变为解锁状态后,将该第二线程锁定在该读写锁的写子锁中,并通过该第二线程执行针对该目标内存资源的写操作。若该读写锁的状态表征该第一线程未在该目标内存资源上执行写操作且该目标内存资源上执行读操作的第一线程数量为0,将该第二线程锁定在该读写锁的写子锁中,并通过该第二线程执行针对该目标内存资源的写操作。
可选的,控制模块13,在获取模块11获取该读写锁的状态之前,还用于将该读写锁的访问子锁的解锁状态修改为锁定状态,该访问子锁用于阻止该第二线程之外的其他线程获取该读写锁的状态。在该第二线程锁定在该读写锁后,将该读写锁的访问子锁的锁定状态修改为解锁状态。
可选的,若该操作需求,以及,该读写锁的状态,判断该第二线程不能对该目标内存资源进行操作,则控制模块13,还用于将该第二线程配置为睡眠状态。
可选的,控制模块13,还用于响应于该虚拟机列表中的第一虚拟机发送的中断请求,唤醒该第二线程。若该读写锁为解锁状态,则将该读写锁从解锁状态修改为锁定状态,并通过该第二线程执行针对该目标内存资源的操作。其中,该中断请求为在该第一虚拟机通过该第一线程针对该目标内存资源的操作执行完成后、将该目标内存资源的读写锁从锁定状态修改为解锁状态,并更新该读写锁中当前授权线程的标识为该第二线程的标识后发送的。
可选的,获取模块11,还用于根据该目标内存资源中的读写锁的名称获取该读写锁的虚拟机列表,以及,虚拟机权限。若该虚拟机列表中包括该第二虚拟机,且该虚拟机权限中该第二虚拟机具备该操作需求所需的目标权限,则获取该读写锁的地址,以调用该读写锁判断是否需要通过该第二虚拟机中的线程对该目标内存资源进行该操作需求对应的操作。
本申请实施例提供的共享资源操作装置,可以执行上述方法实施例中应用于第二线程所属的第二虚拟机的共享资源操作方法,其实现原理和技术效果类似,在此不再赘述。
图7为本申请实施例提供的一种电子设备的结构示意图。其中,该电子设备用于执行前述所说的共享资源操作方法,例如可以是前述所说的虚拟机所在的宿主机。如图7所示,该电子设备700可以包括:至少一个处理器701、存储器702。
存储器702,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。
存储器702可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
处理器701用于执行存储器702存储的计算机执行指令,以实现前述方法实施例所描述的方法。其中,处理器701可能是一个CPU,或者是特定集成电路(ApplicationSpecific Integrated Circuit,简称为ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路。
在具体实现上,如果存储器702以及处理器701独立实现,则存储器702以及处理器701可以通过总线相互连接并完成相互间的通信。总线可以是工业标准体系结构(IndustryStandard Architecture,简称为ISA)总线、外部设备互连(Peripheral Component,简称为PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,简称为EISA)总线等。总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果存储器702和处理器701集成在一块芯片上实现,则存储器702和处理器701可以通过内部接口完成通信。
本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或者光盘等各种可以存储程序代码的介质,具体的,该计算机可读存储介质中存储有程序指令,程序指令用于上述实施例中的方法。
本申请还提供一种程序产品,该程序产品包括执行指令,该执行指令存储在可读存储介质中。计算设备的至少一个处理器可以从可读存储介质读取该执行指令,至少一个处理器执行该执行指令使得计算设备实施上述共享资源操作方法。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (10)
1.一种共享资源操作方法,其特征在于,目标内存资源具有读写锁,所述读写锁中标记有使用所述目标内存资源的虚拟机列表,以及,所述读写锁中标记的当前授权线程的标识为第一线程的标识,标记的下一授权线程的标识为第二线程的标识;所述第一线程和所述第二线程为不同虚拟机的线程;所述方法应用于所述第二线程所属的第二虚拟机,包括:
响应于对所述目标内存资源的操作需求,获取所述读写锁的状态;所述状态用于指示所述第一线程是否正在所述目标内存资源上执行写操作、所述目标内存资源上执行读操作的第一线程数量;
根据所述操作需求,以及,所述读写锁的状态,确定所述第二线程能否对所述目标内存资源进行操作;
若能,则将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作。
2.根据权利要求1所述的方法,其特征在于,所述操作需求为读操作,所述将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作,包括:
若所述读写锁的状态表征所述第一线程正在所述目标内存资源上执行写操作,则在所述读写锁的写子锁从锁定状态变为解锁状态后,将所述第二线程锁定在所述读写锁的读子锁中,并通过所述第二线程执行针对所述目标内存资源的读操作;
若所述读写锁的状态表征所述第一线程未在所述目标内存资源上执行写操作,则将所述第二线程锁定在所述读写锁的读子锁中,并通过所述第二线程执行针对所述目标内存资源的读操作。
3.根据权利要求1所述的方法,其特征在于,所述操作需求为写操作,所述将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作,包括:
若所述读写锁的状态表征所述第一线程正在所述目标内存资源上执行写操作,则在所述读写锁的写子锁从锁定状态变为解锁状态后,将所述第二线程锁定在所述读写锁的写子锁中,并通过所述第二线程执行针对所述目标内存资源的写操作;
若所述读写锁的状态表征所述第一线程未在所述目标内存资源上执行写操作且所述目标内存资源上执行读操作的第一线程数量为0,将所述第二线程锁定在所述读写锁的写子锁中,并通过所述第二线程执行针对所述目标内存资源的写操作。
4.根据权利要求1-3任一项所述的方法,其特征在于,在所述获取所述读写锁的状态之前,还包括:
将所述读写锁的访问子锁的解锁状态修改为锁定状态,所述访问子锁用于阻止所述第二线程之外的其他线程获取所述读写锁的状态;
在所述第二线程锁定在所述读写锁后,还包括:
将所述读写锁的访问子锁的锁定状态修改为解锁状态。
5.根据权利要求4所述的方法,其特征在于,还包括:
若所述操作需求,以及,所述读写锁的状态,判断所述第二线程不能对所述目标内存资源进行操作,则将所述第二线程配置为睡眠状态。
6.根据权利要求5所述的方法,其特征在于,还包括:
响应于所述虚拟机列表中的第一虚拟机发送的中断请求,唤醒所述第二线程;所述中断请求为在所述第一虚拟机通过所述第一线程针对所述目标内存资源的操作执行完成后、将所述目标内存资源的读写锁从锁定状态修改为解锁状态,并更新所述读写锁中当前授权线程的标识为所述第二线程的标识后发送的;
若所述读写锁为解锁状态,则将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作。
7.根据权利要求1-3任一项所述的方法,其特征在于,还包括:
根据所述目标内存资源中的读写锁的名称获取所述读写锁的虚拟机列表,以及,虚拟机权限;
若所述虚拟机列表中包括所述第二虚拟机,且所述虚拟机权限中所述第二虚拟机具备所述操作需求所需的目标权限,则获取所述读写锁的地址,以调用所述读写锁判断是否需要通过所述第二虚拟机中的线程对所述目标内存资源进行所述操作需求对应的操作。
8.一种共享资源操作装置,其特征在于,目标内存资源具有读写锁,所述读写锁中标记有使用所述目标内存资源的虚拟机列表,以及,所述读写锁中标记的当前授权线程的标识为第一线程的标识,标记的下一授权线程的标识为第二线程的标识;所述第一线程和所述第二线程为不同虚拟机的线程;所述方法应用于所述第二线程所属的第二虚拟机,包括:
获取模块,用于响应于对所述目标内存资源的操作需求,获取所述读写锁的状态;所述状态用于指示所述第一线程是否正在所述目标内存资源上执行写操作、所述目标内存资源上执行读操作的第一线程数量;
处理模块,用于根据所述操作需求,以及,所述读写锁的状态,确定所述第二线程能否对所述目标内存资源进行操作;
控制模块,用于若能,则将所述读写锁从解锁状态修改为锁定状态,并通过所述第二线程执行针对所述目标内存资源的操作。
9.一种电子设备,其特征在于,包括:处理器以及存储器,所述处理器与所述存储器通信连接;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至7任一项所述的共享资源操作方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311667835.8A CN117632528A (zh) | 2023-12-06 | 2023-12-06 | 共享资源操作方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311667835.8A CN117632528A (zh) | 2023-12-06 | 2023-12-06 | 共享资源操作方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117632528A true CN117632528A (zh) | 2024-03-01 |
Family
ID=90035451
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311667835.8A Pending CN117632528A (zh) | 2023-12-06 | 2023-12-06 | 共享资源操作方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117632528A (zh) |
-
2023
- 2023-12-06 CN CN202311667835.8A patent/CN117632528A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109271258B (zh) | 读写锁重入的实现方法、装置、终端及存储介质 | |
EP3701377B1 (en) | Method and apparatus for updating shared data in a multi-core processor environment | |
CN105980993B (zh) | 数据处理设备和方法 | |
US7031989B2 (en) | Dynamic seamless reconfiguration of executing parallel software | |
CN105511969B (zh) | 一种跨进程的线程间进行互斥的方法 | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
US9378069B2 (en) | Lock spin wait operation for multi-threaded applications in a multi-core computing environment | |
US20060130061A1 (en) | Use of rollback RCU with read-side modifications to RCU-protected data structures | |
US5893157A (en) | Blocking symbol control in a computer system to serialize accessing a data resource by simultaneous processor requests | |
JP2014059902A (ja) | Simdベクトルの同期 | |
US20130290286A1 (en) | Method, apparatus, and system for operating shared resource in asynchronous multiprocessing system | |
US8769546B2 (en) | Busy-wait time for threads | |
KR101620536B1 (ko) | 액티브 록 정보 유지 및 검색 | |
CN111459691A (zh) | 共享内存的读写方法及装置 | |
CN113806031A (zh) | 通过对象锁保护资源的方法和装置 | |
US20240045787A1 (en) | Code inspection method under weak memory ordering architecture and corresponding device | |
CN117632528A (zh) | 共享资源操作方法、装置、设备及存储介质 | |
EP3726377B1 (en) | Boot rom gating circuit | |
US11347863B2 (en) | Computer apparatus and authority management method based on trust chain | |
US9418175B2 (en) | Enumeration of a concurrent data structure | |
CN117632529A (zh) | 共享资源操作方法、装置、设备及存储介质 | |
CN117421134A (zh) | 共享资源操作方法、装置、设备及存储介质 | |
CN109634766B (zh) | 提升数据流机运行效率的方法、装置、设备及存储介质 | |
US7447875B1 (en) | Method and system for management of global queues utilizing a locked state | |
CN105183668A (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 |