CN115858186A - 共享资源访问方法、***、电子设备及存储介质 - Google Patents
共享资源访问方法、***、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115858186A CN115858186A CN202211715382.7A CN202211715382A CN115858186A CN 115858186 A CN115858186 A CN 115858186A CN 202211715382 A CN202211715382 A CN 202211715382A CN 115858186 A CN115858186 A CN 115858186A
- Authority
- CN
- China
- Prior art keywords
- linked list
- target node
- node
- target
- locking
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种共享资源访问方法、***、电子设备及存储介质,涉及通信领域。该共享资源访问方法包括:获取待访问资源的链表;其中,链表包括若干节点;遍历链表,并判断是否能够在链表中查找到目标节点;其中,目标节包括目标访问资源对应的节点;若不能在链表中查找到目标节点,则对链表加锁,以获得加锁链表;遍历加锁链表,并判断是否能够在加锁链表中查找到目标节点;若能够在加锁链表中查找到目标节点,则访问目标节点。使用本申请实施例提供的共享资源访问方法,能够解决因加锁遍历资源导致的程序并发执行能力下降的问题,提高了程序对共享资源的访问速率和程序的并发处理能力。
Description
技术领域
本申请涉及通信领域,具体而言,涉及一种共享资源访问方法、***、电子设备及存储介质。
背景技术
在高并发场景下,多核进程同时访问同一共享资源时,为了避免脏读、重复添加、踩内存等多进程同步问题发生,常常会对共享资源进行保护。
目前,常见的加锁保护方法共享资源的方法一般为加锁遍历共享资源,加锁一般加的自旋锁或读写锁;其中,自旋锁是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环;读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。
但在访问共享资源的时候,直接对共享资源进行加锁操作,会造成同一资源在同一时间只有单个进程可以访问,多核进程串行执行,程序并发执行能力降低。
发明内容
本申请实施例的目的在于提供一种共享资源访问方法、***、电子设备及存储介质,通过调整加锁的方式,解决由于对共享资源加锁保护,带来的共享资源同一时间仅能被同一进程访问,多核设备本应对共享资源的并行访问变成了串行访问,导致程序并发性能大幅降低的问题。
第一方面,本申请实施例提供一种共享资源访问方法,方法包括:获取
待访问资源的链表;其中,链表包括若干节点;遍历链表,并判断是否能够5在链表中查找到目标节点;其中,目标节包括目标访问资源对应的节点;若
不能在链表中查找到目标节点,则对链表加锁,以获得加锁链表;遍历加锁链表,并判断是否能够在加锁链表中查找到目标节点;若能够在加锁链表中查找到目标节点,则访问目标节点。
在上述实现过程中,本申请实施例提供的共享资源访问方法,为访问目0标资源,首先获取待访问链表,在获取待访问资源的链表之后;遍历链表,
并判断能否在链表中查找到目标节点;若无法查找到目标节点,则对共享资源进行加锁操作,加锁后再次遍历链表;若查找到目标节点,那么可以访问目标资源。由此可知,使用本申请实施例提供的共享资源访问方法能够一定程度上避免加锁带来的资源消耗,能够提高程序的并发性能。
5可选地,在本申请实施例中,遍历链表,并判断是否能够在链表中查找
到目标节点包括:获取目标节点的目标节点元素;从链表的首元结点开始,根据目标节点的节点元素查找目标节点,至链表的最末节点;判断是否能够在链表中查找到节点元素与目标节点元素一致的目标节点。
在上述实现过程中,为了在链表中查找目标节点,通过获取目标节点的0节点元素,从链表的首元结点开始,遍历链表中的所有节点,并将每一个节
点的节点元素与目标节点的节点元素进行比对,判断是否能够从链表中找到该目标节点;因此,使用本申请实施例提供的共享资源访问方法,在第一次遍历链表的时候,就能够得出链表中是否存在目标节点的结论,不会因为直接进行加锁遍历而导致多核程序无法并行运行。
可选地,在本申请实施例中,对链表加锁,以获得加锁链表,包括:获取链表的更新指令,并根据更新指令对链表加锁;其中,锁包括读写锁和自旋锁;更新链表,以获得加锁链表。
在上述实现过程中,本申请实施例中在第一次的无锁遍历未成功找到目标节点的情况下,再对共享资源进行加锁操作;在获取链表的更新指令之后,根据更新指令对链表进行加锁,加锁之后更新链表,进而获得了加锁的共享资源。避免了首次遍历就加锁遍历导致的共享资源串行访问,能够提高程序的并发执行能力。
可选地,在本申请实施例中,该共享资源访问方法还包括:若能在链表中查找到目标节点,则获取目标节点的地址;根据目标节点的地址访问目标访问资源。
在上述实现过程中,当第一次遍历能够在链表中查找到目标节点,那么就获取目标节点的地址,根据目标节点的地址去访问目标访问资源。应当理解的是,各进程在首次遍历时可以并发进行;并且由于需要在链表中添加节点的操作是少数的,大多数情况只需要执行首次遍历;因此,使用本申请实施例提供的共享资源访问方法只会在较少的情况下才会造成共享资源的串行访问,在避免脏读、重复添加、踩内存等多进程同步问题的同时,节约了运行资源。
可选地,在本申请实施例中,该共享资源访问方法还包括:若不能在加锁链表中查找到目标节点,则创建目标节点,并将目标节点挂载于链表上;根据目标节点访问目标访问资源。
在上述实现过程中,本申请实施例提供的共享资源访问方法,在第二次加锁遍历之后,若仍然不能够从链表中找到目标节点,那么需要创建节点,并将创建的节点挂载于链表上,进而实现对目标资源的访问。因此,本申请实施例提供的共享资源访问方法能够保护链表在需要被修改的情况下不产生程序的脏读、重复添加、踩内存等问题。
可选地,在本申请实施例中,创建目标节点,并将目标节点挂载于链表上,包括:为目标节点配置目标存储空间;创建目标节点,并获取目标节点的地址;根据目标节点的地址,将目标节点***目标存储空间,以将目标节点挂载于链表上。
在上述实现过程中,为了将创建目标节点,并将目标节点挂载于链表上,需要先给目标节点配置一个存储空间,并根据目标节点的地址,将目标节点***链表,从而实现了节点的创建。
可选地,在本申请实施例中,根据目标节点的地址,将目标节点***目标存储空间,以将目标节点挂载于链表上之后,方法还包括:更新链表,以获得包括目标节点的链表。
在上述实现过程中,在本申请实施例提供的共享资源访问方法中,将目标节点创建后,根据目标节点的地址,将目标节点***目标存储空间之后,更新添加了目标节点的链表,从而获得了包括目标节点的链表;完成了对节点的创建,保证了进程能够顺利访问目标资源。
第二方面,本申请实施例提供一种共享资源访问***,该共享资源访问***包括:链表获取模块、目标节点查找模块、加锁模块以及目标节点访问模块:链表获取模块用于获取待访问资源的链表;其中,链表包括若干节点;目标节点查找模块用于遍历链表,并判断是否能够在链表中查找到目标节点;其中,目标节包括目标访问资源对应的节点;加锁模块用于不能在链表中查找到目标节点时,对链表加锁,以获得加锁链表;目标节点查找模块还用于遍历加锁链表,并判断是否能够在加锁链表中查找到目标节点;以及目标节点访问模块用于能够在加锁链表中查找到目标节点时,访问目标节点。
第三方面,本申请实施例提供一种电子设备,所述电子设备包括存储器和处理器,所述存储器中存储有程序指令,所述处理器读取并运行所述程序指令时,执行上述任一实现方式中的步骤。
第四方面,本申请实施例还提供一种计算机可读存储介质,所述可读取存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行上述任一实现方式中的步骤。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的共享资源的第一访问流程图;
图2为本申请实施例提供的查找目标节点的流程图;
图3为本申请实施例提供的加锁链表的产生示意图;
图4为本申请实施例提供的共享资源的第二访问流程图;
图5为本申请实施例提供的节点创建流程图;
图6为本申请提供的优选实施方式的流程图;
图7为本申请实施例提供的共享资源访问***的模块示意图;
图8为本申请实施例提供的电子设备的结构示意图。
5具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。例如,附图中的流程图和框图显示了根据本发明的多个实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,
流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所0述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及
的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/5或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬
件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
0申请人在研究过程中发现,高并发场景下多核进程同时访问同一共享
资源时,为避免脏读、重复添加、踩内存等多进程同步问题发生,需要使用锁保护共享资源。常见的加锁保护共享资源的方式如下:加锁遍历共享资源,查找共享资源是否已存在该节点;若存在则结束遍历,不存在则创节点添加到链表上。
对于多核高并发场景下的共享资源使用锁加以保护,虽可以避免多进程同步问题,但会导致同一资源在同一时间只有单个进程可以访问,造成多核进程串行执行,降低了程序并发执行能力。也就是说,虽然使用锁保护共享资源,可以使共享资源不被错误操作,但若不分场景只简单粗暴的使用锁保护共享资源,不仅会造成资源浪费,还会导致程序并发性能下降的问题。
基于此,本申请实施例提供一种共享资源访问方法,通过调整加锁的方式,解决由于对共享资源加锁保护,带来的共享资源同一时间仅能被同一进程访问,多核设备本应对共享资源的并行访问变成了串行访问,导致程序并发性能大幅降低的问题。
请参看图1,图1为本申请实施例提供的共享资源的第一访问流程图;本申请实施例提供的共享资源访问方法旨在解决为共享资源添加节点时导致的程序并发性能降低的问题;该共享资源访问方法可以通过以下步骤实现:
步骤S100:获取待访问资源的链表。
在上述步骤S100中,获取待访问资源的链表;需要说明的是,链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列节点(地址)组成,结点可动态的生成。
步骤S101:遍历链表,并判断是否能够在链表中查找到目标节点。
步骤S102:若不能在链表中查找到目标节点,则对链表加锁,以获得加锁链表。
在上述步骤S101-S102中,遍历待访问资源的链表,并判断链表中是否能够查找到目标节点;如果不能够在链表中查找到目标节点,则需要对链表加锁,也就是对共享资源加锁,从而获得被加锁的共享资源。
步骤S103:遍历加锁链表,并判断是否能够在加锁链表中查找到目标节点。
步骤S104:若能够在加锁链表中查找到目标节点,则访问目标节点。
在上述步骤S103-S104中,对待访问资源的链表进行加锁后;进一步地,再次遍历加锁后的链表,再次判断能否在加锁后的链表中查找到目标节点;若能够在加锁后的链表中查找到目标节点,那么就可以直接访问该目标节点。
需要说明的是,通常情况下,若要为一共享资源添加节点,首先需要判断共享资源上是否已存在该节点,那么往往就要通过对共享资源的遍历来确认;此时还不需要对共享资源进行修改,且大多数情况下节点已存在,往往只需要一次普通遍历(无锁遍历)即可得出结论,从而在多数情况下,可以省去一次加锁的资源消耗。而在无锁遍历的过程中,多核程序是可以并发执行的;因此,不会导致并行访问变成串行访问。
通过图1可知,本申请实施例提供的共享资源访问方法,为访问目标资源,首先获取待访问链表,在获取待访问资源的链表之后;遍历链表,并判断能否在链表中查找到目标节点;若无法查找到目标节点,则对共享资源进行加锁操作,加锁后再次遍历链表;若查找到目标节点,那么可以访问目标资源。由此可知,使用本申请实施例提供的共享资源访问方法能够一定程度上避免加锁带来的资源消耗,能够提高程序的并发性能。
请参看图2,图2为本申请实施例提供的查找目标节点的流程图;在本申请实施例的可选实施方式中,遍历链表,并判断是否能够在链表中查找到目标节点,可以通过以下步骤实现:
步骤S200:获取目标节点的目标节点元素。
在上述步骤S200中,获取目标节点的目标节点元素;本领域技术人员可以理解的是,链表中每个节点都有该节点对应的节点元素,不同的节点对应不同的节点元素。
步骤S201:从链表的首元结点开始,根据目标节点的节点元素查找目标节点,至链表的最末节点。
在上述步骤S201中,在链表中查找指定数据元素,最常用的方法是:从首元结点开始依次遍历所有节点,直至找到存储目标元素的结点。如果遍历至最后一个结点仍未找到,表明链表中没有存储该元素。
步骤S203:判断是否能够在链表中查找到节点元素与目标节点元素一致的目标节点。
在上述步骤S203中,在遍历链表中的节点时,将目标节点的节点元素与链表中的节点元素进行比对,判断是否能够在链表中查找到节点元素与目标节点元素一致的目标节点。
通过图2可知,为了在链表中查找目标节点,通过获取目标节点的节点元素,从链表的首元结点开始,遍历链表中的所有节点,并将每一个节点的节点元素与目标节点的节点元素进行比对,判断是否能够从链表中找到该目标节点;因此,使用本申请实施例提供的共享资源访问方法,在第一次遍历链表的时候,就能够得出链表中是否存在目标节点的结论,不会因为直接进行加锁遍历而导致多核程序无法并行运行。
请参看图3,图3为本申请实施例提供的加锁链表的产生示意图;在本申请实施例的可选实施方式中,加锁通常指加自旋锁或读写锁;其中,自旋
锁是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线5程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会
退出循环;读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。对链表加锁,以获得加锁链表,可通过以下步骤实现:
步骤S300:获取链表的更新指令,并根据更新指令对链表加锁。
0步骤S301:更新链表,以获得加锁链表。
在上述步骤S300-S301中,当第一次无锁遍历之后,并未在链表中找到目标节点之后;获取链表的更新指令,根据该更新指令对链表进行加锁操作;
其中,加锁操作可以是加自旋锁或读写锁。在对链表加锁之后,更新链表,从而获得加锁链表,实现了对共享资源的加锁。
5通过图3可知,本申请实施例中在第一次的无锁遍历未成功找到目标
节点的情况下,再对共享资源进行加锁操作;在获取链表的更新指令之后,根据更新指令对链表进行加锁,加锁之后更新链表,进而获得了加锁的共享资源。避免了首次遍历就加锁遍历导致的共享资源串行访问,能够提高程序的并发执行能力。
0在一可选的实施方式中,该共享资源访问方法还包括:若能在链表中查
找到目标节点,则获取目标节点的地址;根据目标节点的地址访问目标访问资源。
由此可知,当第一次遍历能够在链表中查找到目标节点,那么就获取目标节点的地址,根据目标节点的地址去访问目标访问资源。应当理解的是,各进程在首次遍历时可以并发进行;并且由于需要在链表中添加节点的操
作是少数的,大多数情况只需要执行首次遍历;因此,使用本申请实施例提5供的共享资源访问方法只会在较少的情况下才会造成共享资源的串行访问,
在避免脏读、重复添加、踩内存等多进程同步问题的同时,节约了运行资源。
请参看图4,图4为本申请实施例提供的共享资源的第二访问流程图;
在本申请实施例的可选实施方式中,该共享资源访问方法还包括:
步骤S400:若不能在加锁链表中查找到目标节点,则创建目标节点,0并将目标节点挂载于链表上。
步骤S401:根据目标节点访问目标访问资源。
在上述步骤S400-S401中,本申请实施例提供的共享资源访问方法中,若第一次无锁遍历不能在链表中找到目标节点;进一步地,对共享资源的链
表进行加锁操作,在加锁之后,再次遍历链表;若仍然不能够在链表中找到5目标节点,则需要创建节点,并将节点挂载与链表上,从而实现对目标资源的访问。
通过图4可知,本申请实施例提供的共享资源访问方法,在第二次加锁遍历之后,若仍然不能够从链表中找到目标节点,那么需要创建节点,并
将创建的节点挂载于链表上,进而实现对目标资源的访问。因此,本申请实0施例提供的共享资源访问方法能够保护链表在需要被修改的情况下不产生
程序的脏读、重复添加、踩内存等问题。
请参看图5,图5为本申请实施例提供的节点创建流程图;在本申请实施例的可选实施方式中,所创建目标节点,并将目标节点挂载于链表上,包括如下步骤:
步骤S500:为目标节点配置目标存储空间。
步骤S501:创建目标节点,并获取目标节点的地址。
步骤S502:根据目标节点的地址,将目标节点***目标存储空间,以将目标节点挂载于链表上。
在上述步骤S500-步骤S502中,为了创建目标节点,首先需要给待创建的节点配置目标存储空间;在配置好存储空间之后,创建节点,并获取目标节点的地址;进一步地,根据目标节点的地址将目标节点***目标存储空间,从而实现了将新创建的目标节点挂载于链表上。
通过图5可知,为了将创建目标节点,并将目标节点挂载于链表上,需要先给目标节点配置一个存储空间,并根据目标节点的地址,将目标节点***链表,从而实现了节点的创建。
在一可选地实施例中,在根据目标节点的地址,将目标节点***目标存储空间,以将目标节点挂载于链表上之后,方法还包括:更新链表,以获得包括目标节点的链表。
由此可知,在本申请实施例提供的共享资源访问方法中,将目标节点创建后,根据目标节点的地址,将目标节点***目标存储空间之后,更新添加了目标节点的链表,从而获得了包括目标节点的链表;完成了对节点的创建,保证了进程能够顺利访问目标资源。
请参看图6,图6为本申请提供的优选实施方式的流程图;为了更好地理解本申请实施例提供的共享资源访问方法,现以多核设备数据包转发过程统计源IP数据为例进行说明。
需要说明的是,本例以IP地址为节点特征字段进行统计,但不关注具体数据信息,只对以IP地址为节点特征建立的源IP链表进行说明。
该方法包括如下步骤:
步骤S600:获取并解析报文获取连接的源IP。
步骤S601:遍历源IP链表查找链表上是否已存在该源IP节点,若已存在则结束此次遍历且无需添加新节点。
在上述步骤S600中,遍历源IP链表,此次遍历为无锁遍历,查找链表上是否已存在该源IP节点,已存在则结束此次遍历且无需添加新节点。
步骤S602:对链表加以锁保护,遍历源IP链表,若查找到对应节点则结束此次遍历,若仍未查找则创建新节点并挂载于对应链表上。
在上述步骤S602中,此时为防止多核心同时对链表操作引发同步问题,对链表加以锁保护,遍历源IP链表,若查找到对应节点则结束此次遍历,若仍未查找则创建新节点并挂载于对应链表上。其中,相同IP的主机可以创建多条连接,源IP地址数是小于等于连接数的,即创建节点的次数小于等于遍历次数。
通过图6可知,本申请实施例通过两次遍历方式,实现了在节点添加之前对是否已存在该节点的快速判断,从而解决了因现有发明的一次加锁遍历导致的程序并发执行能力下降的问题,提高了程序对共享资源的访问速率和程序的并发处理能力。
请参看图7,图7为本申请实施例提供的共享资源访问***的模块示意图;该共享资源访问***100包括:链表获取模块110、目标节点查找模块120、加锁模块130以及目标节点访问模块140。
链表获取模块110用于获取待访问资源的链表;其中,链表包括若干节点;目标节点查找模块120用于遍历链表,并判断是否能够在链表中查找到目标节点;其中,目标节包括目标访问资源对应的节点;加锁模块130用于不能在链表中查找到目标节点时,对链表加锁,以获得加锁链表;目标节点查找模块120还用于遍历加锁链表,并判断是否能够在加锁链表中查找到目标节点;以及目标节点访问模块140用于能够在加锁链表中查找到目标节点时,访问目标节点。
在一可选地实施例中,目标节点查找模块120遍历链表,并判断是否能够在链表中查找到目标节点包括:获取目标节点的目标节点元素;目标节点查找模块120从链表的首元结点开始,根据目标节点的节点元素查找目标节点,至链表的最末节点;目标节点查找模块120判断是否能够在链表中查找到节点元素与目标节点元素一致的目标节点。
在一可选地实施例中,该共享资源访问***100还包括链表更新模块150,加锁模块130对链表加锁,以获得加锁链表,包括:加锁模块130获取链表的更新指令,并根据更新指令对链表加锁;其中,锁包括读写锁和自旋锁;链表更新模块150更新链表,以获得加锁链表。
在一可选地实施例中,若目标节点查找模块120能在链表中查找到目标节点,则获取目标节点的地址;目标节点访问模块140根据目标节点的地址访问目标访问资源。
在一可选地实施例中,共享资源访问***100还包括节点创建模块160;若目标节点查找模块120不能在加锁链表中查找到目标节点,节点创建模块160创建目标节点,并将目标节点挂载于链表上;根据目标节点访问目标访问资源。
在一可选地实施例中,节点创建模块160创建目标节点,并将目标节点挂载于链表上包括:节点创建模块160为目标节点配置目标存储空间;创建目标节点,并获取目标节点的地址;节点创建模块160根据目标节点的地址,将目标节点***目标存储空间,以将目标节点挂载于链表上。
在一可选地实施例中,节点创建模块160根据目标节点的地址,将目标节点***目标存储空间,以将目标节点挂载于链表上之后,链表更新模块150更新链表,以获得包括目标节点的链表。
请参见图8,图8为本申请实施例提供的电子设备的结构示意图。本申请实施例提供的一种电子设备300,包括:处理器301和存储器302,存储器302存储有处理器301可执行的机器可读指令,机器可读指令被处理器301执行时执行如上的方法。
基于同一发明构思,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行上述任一实现方式中的步骤。
所述计算机可读存储介质可以是随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等各种可以存储程序代码的介质。其中,存储介质用于存储程序,所述处理器在接收到执行指令后,执行所述程序,本发明实施例任一实施例揭示的过程定义的电子终端所执行的方法可以应用于处理器中,或者由处理器实现。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
可以替换的,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。
所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种共享资源访问方法,其特征在于,所述方法包括:
获取待访问资源的链表;其中,所述链表包括若干节点;
遍历所述链表,并判断是否能够在所述链表中查找到目标节点;其中,所述目标节包括目标访问资源对应的节点;
若不能在所述链表中查找到所述目标节点,则对所述链表加锁,以获得加锁链表;
遍历所述加锁链表,并判断是否能够在所述加锁链表中查找到所述目标节点;
若能够在所述加锁链表中查找到所述目标节点,则访问所述目标节点。
2.根据权利要求1所述的方法,其特征在于,所述遍历所述链表,并判断是否能够在所述链表中查找到目标节点,包括:
获取所述目标节点的目标节点元素;
从所述链表的首元结点开始,根据所述目标节点的所述节点元素查找所述目标节点,至所述链表的最末节点;
判断是否能够在所述链表中查找到节点元素与所述目标节点元素一致的目标节点。
3.根据权利要求1所述的方法,其特征在于,所述对所述链表加锁,以获得加锁链表,包括:
获取所述链表的更新指令,并根据所述更新指令对所述链表加锁;其中,所述锁包括读写锁和自旋锁;
更新所述链表,以获得所述加锁链表。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若能在所述链表中查找到所述目标节点,则获取所述目标节点的地址;
根据所述目标节点的地址访问所述目标访问资源。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若不能在所述加锁链表中查找到所述目标节点,则创建所述目标节点,并将所述目标节点挂载于所述链表上;
根据所述目标节点访问所述目标访问资源。
6.根据权利要求5所述的方法,其特征在于,所创建所述目标节点,并将所述目标节点挂载于所述链表上,包括:
为所述目标节点配置目标存储空间;
创建所述目标节点,并获取所述目标节点的地址;
根据所述目标节点的地址,将所述目标节点***所述目标存储空间,以将所述目标节点挂载于所述链表上。
7.根据权利要求6所述的方法,其特征在于,在所述根据所述目标节点的地址,将所述目标节点***所述目标存储空间,以将所述目标节点挂载于所述链表上之后,所述方法还包括:
更新所述链表,以获得包括所述目标节点的链表。
8.一种共享资源访问***,其特征在于,所述***包括:链表获取模块、目标节点查找模块、加锁模块以及目标节点访问模块:
所述链表获取模块用于获取待访问资源的链表;其中,所述链表包括若干节点;
所述目标节点查找模块用于遍历所述链表,并判断是否能够在所述链表中查找到目标节点;其中,所述目标节包括目标访问资源对应的节点;
所述加锁模块用于不能在所述链表中查找到所述目标节点时,对所述链表加锁,以获得加锁链表;
所述目标节点查找模块还用于遍历所述加锁链表,并判断是否能够在所述加锁链表中查找到所述目标节点;以及
所述目标节点访问模块用于能够在所述加锁链表中查找到所述目标节点时,访问所述目标节点。
9.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器中存储有程序指令,所述处理器运行所述程序指令时,执行权利要求1-7中任一项所述方法中的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器运行时,执行权利要求1-7任一项所述方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211715382.7A CN115858186A (zh) | 2022-12-29 | 2022-12-29 | 共享资源访问方法、***、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211715382.7A CN115858186A (zh) | 2022-12-29 | 2022-12-29 | 共享资源访问方法、***、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115858186A true CN115858186A (zh) | 2023-03-28 |
Family
ID=85656152
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211715382.7A Pending CN115858186A (zh) | 2022-12-29 | 2022-12-29 | 共享资源访问方法、***、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115858186A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117055988A (zh) * | 2023-07-11 | 2023-11-14 | 荣耀终端有限公司 | 一种轻量级操作***优化处理方法及电子设备 |
-
2022
- 2022-12-29 CN CN202211715382.7A patent/CN115858186A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117055988A (zh) * | 2023-07-11 | 2023-11-14 | 荣耀终端有限公司 | 一种轻量级操作***优化处理方法及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7090657B2 (ja) | アプリケーションをアップグレードするための方法、装置、デバイスならびに記憶媒体 | |
US6681391B1 (en) | Method and system for installing software on a computer system | |
CN107832062B (zh) | 一种程序更新方法及终端设备 | |
EP3267308B1 (en) | Application loading method and device | |
EP1788493A1 (en) | Detecting changes in data | |
US7149865B2 (en) | Memory allocation using mask-bit pattern to encode metadata within memory address | |
US20150363195A1 (en) | Software package management | |
CN107797820B (zh) | 用于生成补丁的方法和装置 | |
US10073646B2 (en) | Multi-tier data synchronizer based on concurrent linked list | |
CN111694638A (zh) | 规则包加载方法、规则包执行方法及终端设备 | |
CN109614559A (zh) | 数据处理方法及装置 | |
US20120011166A1 (en) | Skip list generation | |
US8185888B2 (en) | Software execution with minimal impact deployment | |
CN115858186A (zh) | 共享资源访问方法、***、电子设备及存储介质 | |
CN111984264B (zh) | 一种静态库的生成方法和装置 | |
CN111367560A (zh) | 一种扩展服务器功能的方法、***、设备及介质 | |
US8719274B1 (en) | Method, system, and apparatus for providing generic database services within an extensible firmware interface environment | |
CN113590144B (zh) | 一种依赖处理方法及装置 | |
US20120136871A1 (en) | Skip list generation | |
CN114443598A (zh) | 写数据方法、装置、计算机设备及存储介质 | |
CN115705294B (zh) | 用于获取函数调用信息的方法、装置、电子设备和介质 | |
CN113760237A (zh) | 编译地址的更新方法、装置、终端设备及可读存储介质 | |
CN115878336A (zh) | 锁操作中的信息处理方法、装置及计算设备 | |
CN112100479A (zh) | 应用访问方法、装置、电子设备及存储介质 | |
CN111209056B (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 |