CN108491276B - 函数调用管理方法及装置 - Google Patents
函数调用管理方法及装置 Download PDFInfo
- Publication number
- CN108491276B CN108491276B CN201810252545.XA CN201810252545A CN108491276B CN 108491276 B CN108491276 B CN 108491276B CN 201810252545 A CN201810252545 A CN 201810252545A CN 108491276 B CN108491276 B CN 108491276B
- Authority
- CN
- China
- Prior art keywords
- function
- value
- preset value
- flag value
- state flag
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种函数调用管理方法及装置,通过使用一个执行指令实现InterlockedCompareExchange函数进行原子性操作对目标函数的调用状态标志值进行判断修改的方式,代替原来使用多个执行指令通过系统互斥体资源实现自旋锁判断逻辑。如此,在不使用系统互斥体资源的情况下实现了自旋锁功能,更加的节省系统资源,并且处理效率更高。
Description
技术领域
本发明涉及数据处理技术领域,具体而言,涉及一种函数调用管理方法及装置。
背景技术
在电子设备运行中,可能涉及多个线程均需要基调用某个函数。为了防止不同进行同时该函数进行盗用,造成相关处理逻辑或参数的冲突,保护相关的代码或者变量,在多线程中通常采用锁机制来解决。例如在Windows系统中可以自旋锁(SpinLock)、互斥体(Mutex)、信号量(Semaphore)等方法来实现锁功能。以自旋锁为例,自旋锁机制一般提供加锁的lock函数,以及解锁的unlock函数,利用lock函数对需要保护的函数进行加锁保护,这样其他线程运行到调用该函数地址时,就会被阻塞;在线程完成对函数的调用,在利用unlock函数对该函数进行解锁。这样,对于多个同时运行的线程来说,实现了只有一个线程能够访问到具有自旋锁机制的函数。但是在现有技术的自旋锁机制中,通过一个保护锁计数变量来表征函数是否正在读写,这就需要依赖运行系统资源的互斥体变量来保护锁计数变量,虽然实现了自旋锁功能,但是需要创建多个自旋锁时,就会创建同等函数量的系统互斥体资源,从处理效率和对系统资源的占用上来说,都造成了较大的负担。
发明内容
为了克服现有技术中的上述不足,本发明的目的在于提供一种函数调用管理方法,所述方法包括:
目标线程循环地获得目标函数的调用权限的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为第一预设值;其中,当所述调用状态标志值为第一预设值时,表示该目标函数未被其他线程调用;当所述调用状态标志值为第二预设值时,表示该目标函数整在被其他线程调用;
若所述调用状态标志值所述为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述调用状态标志值,并将所述第一预设值赋值给一个中间标志值;
若所述调用状态标志值不为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述中间标志值;
检测所述中间标志值是否为所述第一预设值;
若所述中间标志值为所述第一预设值,则由该目标线程对所述目标函数进行读写操作;
若所述中间标志值不为所述第一预设值,则继续循环执行检测所述调用状态标志值是否为第一预设值的步骤及该步骤之后的步骤。
可选地,在上述方法中,在所述由该目标线程对所述目标函数进行读写操作的步骤之后,所述方法还包括:
通过InterlockedCompareExchange函数执行原子性操作,将所述第一预设值赋值给所述目标函数的调用状态标志值。
可选地,在上述方法中,所述方法还包括:
在所述目标函数初始化时,将该目标函数的调用状态标志值配置为所述第一预设值。
可选地,在上述方法中,所述若所述中间标志值为所述第一预设值,则由该目标线程对所述目标函数进行读写操作的步骤,包括:
若所述中间标志值为所述第一预设值,跳出获得目标函数的调用权限的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为所述第一预设值的循环,并由该目标线程对所述目标函数进行读写操作。
本发明的另一目的在于提供一种函数调用管理装置,所述装置包括:
第一加锁执行模块,用于目标线程循环地获得目标函数的调用权限的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为第一预设值;其中,当所述调用状态标志值为第一预设值时,表示该目标函数未被其他线程调用;当所述调用状态标志值为第二预设值时,表示该目标函数整在被其他线程调用;若所述调用状态标志值所述为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述调用状态标志值,并将所述第一预设值赋值给一中间标志值;若所述调用状态标志值不为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述中间标志值;
第二加锁执行模块,用于检测所述中间标志值是否为所述第一预设值;若所述中间标志值为所述第一预设值,则由该目标线程对所述目标函数进行读写操作;若所述中间标志值不为所述第一预设值,则使所述第一加锁执行模块继续循环执行检测所述调用状态标志值是否为第一预设值的步骤及该步骤之后的步骤。
可选地,在上述装置中,所述装置还包括:
解锁执行模块,用于在由该目标线程对所述目标函数进行读写操作之后,通过InterlockedCompareExchange函数执行原子性操作,将所述第一预设值赋值给所述目标函数的调用状态标志值。
可选地,在上述装置中,所述装置还包括:
初始化模块,用于在所述目标函数初始化时,将该目标函数的调用状态标志值配置为所述第一预设值。
可选地,在上述装置中,所述第二加锁执行模块在所述中间标志值为所述第一预设值时,具体用于跳出获得目标函数的调用权限的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为所述第一预设值的循环,并由该目标线程对所述目标函数进行读写操作。
本发明的另一目的在于提供一种机器可读存储介质,存储有可执行的指令,所述指令在被处理器调用或执行时,实现本申请提供的所述函数调用挂管理方法。
本发明的另一目的在于提供一种电子设备,包括机器可读存储介质及处理器,所述机器可读存储介质存储有可执行指令,所述指令在被所述处理器执行时,促使所述电子设备实现本申请提供的所述函数调用挂管理方法。
相对于现有技术而言,本发明具有以下有益效果:
本申请提供的函数调用管理方法及装置,通过使用一个执行指令实现InterlockedCompareExchange函数进行原子性操作对目标函数的调用状态标志值进行判断修改的方式,代替原来使用多个执行指令通过系统互斥体资源实现自旋锁判断逻辑。如此,在不使用系统互斥体资源的情况下实现了自旋锁功能,更加的节省系统资源,并且处理效率更高。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为现有技术实现自旋锁的代码示意图;
图2为本发明实施例提供的电子设备的示意图;
图3为本发明实施例提供的函数调用管理方法的示意图;
图4为本发明实施例提供的函数调用管理方法的示例性代码示意图;
图5为本发明实施例提供的函数调用装置的功能模块示意图。
图标:100-电子设备;110-函数调用管理装置;111-第一加锁执行模块;112-第二加锁执行模块;113-解锁执行模块;114-初始化模块;120-机器可读存储介质;130-处理器。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本发明的描述中,需要说明的是,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
请参照图1,图1为现有技术自旋锁的代码示意图,可以看出,在该自旋锁的实现方案中,有两个重要的数据,一个是类型为mutex(互斥体)的m_mutex(互斥体锁资源),一个是类型为32位整数的m_spin(自旋锁计数变量)。在该实现方案中包括:
A.构造函数。在构造函数中,将锁计数变量m_spin设置为0,表示该锁初始化时,是一个空闲的,未被任何线程占用的自旋锁。
B.加锁函数lock()。加锁函数lock是该自旋锁实现的关键,该lock函数的主体是在一个while循环中的,在循环体中,首先调用成员对象m_mutex互斥体的进行上锁,然后判断锁计数变量m_spin是否等于0,如果等于0,则说明该自旋锁未被占用,从而可以获取到该锁,并且在退出循环体之前,首先将锁计数设置为1,这样该自旋锁就被目标线程所占用,然后调用互斥体的unlock方法对互斥体锁进行解锁;如果该m_spin不等于0,则表明该自旋锁已经被别的线程所占用,那么就只能在该while循环体中不断的对m_spin进行判断,直到m_spin为0时,才能退出该while循环体,从而起到阻塞未获取到自旋锁线程的功能。
C.解锁函数unlock()。解锁函数中是在互斥体m_mutex的保护中,将锁计数变量m_spin设置为0即可,这样该自旋锁又再次成为空闲的状态。
经发明人研究显现,上述的方案中,完全是依赖于自旋锁自身的m_mutex互斥体对象对所计数变量实现保护,虽然实现了自旋锁的功能,但是不管是在效率上,还是在对系统资源的使用上,都存在不足。当需要创建很多个自旋锁时,也就相应的创建了同等数量多的系统互斥体资源。
故在本申请实施例中,提供一种在不使用系统互斥体资源的情况下,高效实现自旋锁功能的方案,下面对本申请实施例提供的方案进行详细阐述。
首先,请参照图2,图2为本实施例提供的一种电子设备100的示意图,所述电子设备100可以为,但不仅限于,服务器、个人电脑(personal computer,PC)、智能手机、平板电脑、个人数字助理(personal digital assistant,PDA)、移动上网设备(mobile Internetdevice,MID)等。
所述电子设备100的方框示意图。所述电子设备100包括函数调用管理装置110、机器可读存储介质120及处理器130。
所述机器可读存储介质120、处理器130以及通信单元140各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述函数调用管理装置110包括至少一个可以软件或固件(firmware)的形式存储于所述机器可读存储介质120中或固化在所述电子设备100的操作系统(operating system,OS)中的软件功能模块。所述处理器130用于执行所述机器可读存储介质120中存储的可执行模块,例如所述函数调用管理装置110所包括的软件功能模块及计算机程序等。
其中,所述机器可读存储介质120可以是,但不限于,随机存取存储器(RandomAccess Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable ProgrammableRead-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable ProgrammableRead-Only Memory,EEPROM)等。其中,机器可读存储介质120用于存储程序,所述处理器130在接收到执行指令后,执行所述程序。
请参照图3,图3为应用于图1所示的电子设备100的一种函数调用管理方法的流程图,以下将对所述方法包括各个步骤进行详细阐述。
步骤S110,在目标函数初始化时,将该目标函数的调用状态标志值配置为所述第一预设值。
在本实施例中,所述目标函数的调用状态标志值用于表征该目标函数是否正在本其他线程调用。其中,当所述调用状态标志值为第一预设值时,表示该目标函数未被其他线程调用;当所述调用状态标志值为第二预设值时,表示该目标函数整在被其他线程调用。
在本实施例中,请参照图4,图4示出了本实施例的一种示例性的代码,其中,通过自旋锁函数SpinLock()规定目标函数的自旋锁功能逻辑,m_spin为所述调用状态标志值,所述第一预设值为0,第二预设值为1,在目标函数初始化时,在图4所示第4行代码示出了在所述目标函数初始化时,将m_spin的值赋为0,以表示该目标函数当前未被任何线程调用。
步骤S120,目标线程循环地获得目标函数的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为第一预设值。
步骤S130,若所述调用状态标志值所述为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述调用状态标志值,并将所述第一预设值赋值给一个中间标志值。
步骤S140,若所述调用状态标志值不为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述中间标志值。
请再次参照图4,在本实施例中,通过InterlockedCompareExchange函数代替原来使用多个执行指令通过系统互斥体资源实现自旋锁判断逻辑。在图4示出的示例性代码中,SpinLock()函数中的lock()方法规定了在获得自旋锁并加锁处理的逻辑。其他的线程可以通过调用lock()方法对所述目标函数进行获得自旋锁及加锁处理。其中,通过InterlockedCompareExchange系统函数来完成对调用状态标志值m_spin的安全读写操作,变量old为所述中间标志值。
InterlockedCompareExchange函数的功能是将其第一个参数与三个参数进行比较,如果第一个参数的值与第三个参数的值相等,那么就将第二个参数的值赋值给第一个参数,该函数的返回值是原来未被第二个参数赋值前,第一个参数的值;如果第一个参数的值不与第三个参数相等,则直接返回第一个参数的值。在本实施例中,InterlockedCompareExchange函数的第一个采纳数值为所述调用状态标志值m_spin,第二个参数值为所述第二预设值,第三个参数值为第一预设值。
即,将m_spin与0进行比较,如果m_spin等于0,表示所述目标函数未被任何线程调用,则将1赋值给m_spin,表示现在由所述目标线程调用所述目标函数,对目标函数上锁,防止其他线程调用。然后返回0给变量old。
如果m_spin不等于0,表示有其他线程正在所述目标函数,则将0赋值给变量old。
应当理解的是,在本实施例中,InterlockedCompareExchange函数作为一个指令,执行的是原子操作(atomic operation),步骤S120至步骤S140均通过图4所示的第10行代码实现。所谓原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会换到另一个线程。也就是说,所述电子设备100的CPU在一个时间点仅能执行一个InterlockedCompareExchange函数,这样,保证了一个时间点只有一个线程可以对m_spin进行赋值或修改。
步骤S150,检测所述中间标志值是否为所述第一预设值。
若是,则进入步骤S160,跳出获得目标函数的调用权限的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为所述第一预设值的循环,由该目标线程对所述目标函数进行读写操作。
若否,则跳转到步骤S120,继续循环执行检测所述调用状态标志值是否为第一预设值的步骤及步骤S120之后的步骤。
请再次参照图4所示的示例性代码,通过图4所示代码第11行至第14行实现步骤S150至160。
根据步骤S130及步骤S140,变量old的值总是为m_spin在被InterlockedCompareExchange函数处理之前的值。所以,若old的值为0,则表示所述目标函数没有被任何其他线程调用,则执行break指令,跳出while循环,执行步骤S160,由所述目标线程调用所述目标函数。若old的值为1,则表示所述目标函数还在被其他线程调用,则跳转到图4所示代码第8行继续执行while循环。
基于上述设计,本实施例提供的函数调用管理方法中,目标线程可以在不使用系统互斥体资源的情况下,通过InterlockedCompareExchange函数的原子操作对目标函数的调用状态标志值的判断和修改逻辑,实现自旋锁功能。
进一步地,在本实施例还中,在所述由该目标线程对所述目标函数进行读写操作的步骤之后。
所述目标线程可以通过InterlockedCompareExchange函数执行原子性操作,将所述第一预设值赋值给所述目标函数的调用状态标志值。
例如,请再次参照图4,SpinLock()函数中的unlock()方法规定了解除自旋锁的逻辑。所述目标线程在完成对所述目标函数的调用以后,可以通过unlock()方法解除自旋锁。
在unlock()方法同样通过InterlockedCompareExchange函数执行原子性操作将m_spin复制为0,以表示所述目标函数当前未被调用,其他线程可以竞争调用该目标函数了。
请参照图5,本实施例还提供一种应用于图2所示电子设备100的函数管理装置,所述函数调用管理装置110包括第一加锁执行模块111及第二加锁执行模块112。
所述第一加锁执行模块111,用于目标线程循环地获得目标函数的调用权限的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为第一预设值;其中,当所述调用状态标志值为第一预设值时,表示该目标函数未被其他线程调用;当所述调用状态标志值为第二预设值时,表示该目标函数整在被其他线程调用;若所述调用状态标志值所述为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述调用状态标志值,并将所述第一预设值赋值给一中间标志值;若所述调用状态标志值不为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述中间标志值。
本实施例中,所述第一加锁执行模块111可用于执行图3所示的步骤S120及步骤S130,关于所述第一加锁执行模块111的具体描述可参对所述步骤S120及步骤S130的描述。
所述第二加锁执行模块112,用于检测所述中间标志值是否为所述第一预设值;若所述中间标志值为所述第一预设值,则由该目标线程对所述目标函数进行读写操作;若所述中间标志值不为所述第一预设值,则使所述第一加锁执行模块111继续循环执行检测所述调用状态标志值是否为第一预设值的步骤及该步骤之后的步骤。
本实施例中,所述第二加锁执行模块112可用于执行图3所示的步骤S140至步骤S160,关于所述第二加锁执行模块112的具体描述可参对所述步骤S140至步骤S160的描述。
进一步地,在本实施例中,请再次参照图5,所述装置还包括解锁执行模块113。
所述解锁执行模块113,用于在由该目标线程对所述目标函数进行读写操作之后,通过InterlockedCompareExchange函数执行原子性操作,将所述第一预设值赋值给所述目标函数的调用状态标志值。
进一步地,在本实施例中,请再次参照图5,所述装置还包括初始化模块114。
所述初始化模块114,用于在所述目标函数初始化时,将该目标函数的调用状态标志值配置为所述第一预设值。
本实施例中,所述解锁执行模块113可用于执行图3所示的步骤S110,关于所述解锁执行模块113的具体描述可参对所述步骤S110的描述。
进一步地,在本实施例中,所述第二加锁执行模块112在所述中间标志值为所述第一预设值时,具体用于跳出获得目标函数的调用权限的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为所述第一预设值的循环,并由该目标线程对所述目标函数进行读写操作。
综上所述,本申请提供的函数调用管理方法及装置,通过使用一个执行指令实现InterlockedCompareExchange函数进行原子性操作对目标函数的调用状态标志值进行判断修改的方式,代替原来使用多个执行指令通过系统互斥体资源实现自旋锁判断逻辑。如此,在不使用系统互斥体资源的情况下实现了自旋锁功能,更加的节省系统资源,并且处理效率更高。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (8)
1.一种函数调用管理方法,其特征在于,所述方法包括:
目标线程循环地获得目标函数的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为第一预设值;其中,当所述调用状态标志值为第一预设值时,表示该目标函数未被其他线程调用;当所述调用状态标志值为第二预设值时,表示该目标函数整在被其他线程调用;
若所述调用状态标志值所述为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述调用状态标志值,并将所述第一预设值赋值给一个中间标志值;
若所述调用状态标志值不为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述中间标志值;
检测所述中间标志值是否为所述第一预设值;
若所述中间标志值为所述第一预设值,则由该目标线程对所述目标函数进行读写操作;
若所述中间标志值不为所述第一预设值,则继续循环执行所述检测所述调用状态标志值是否为第一预设值的步骤及该步骤之后的步骤;
其中,在所述由该目标线程对所述目标函数进行读写操作的步骤之后,所述方法还包括:
通过InterlockedCompareExchange函数执行原子性操作,将所述第一预设值赋值给所述目标函数的调用状态标志值。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述目标函数初始化时,将该目标函数的调用状态标志值配置为所述第一预设值。
3.根据权利要求1所述的方法,其特征在于,所述若所述中间标志值为所述第一预设值,则由该目标线程对所述目标函数进行读写操作的步骤,包括:
若所述中间标志值为所述第一预设值,跳出获得目标函数的调用权限的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为所述第一预设值的循环,并由该目标线程对所述目标函数进行读写操作。
4.一种函数调用管理装置,其特征在于,所述装置包括:
第一加锁执行模块,用于目标线程循环地获得目标函数的调用权限的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为第一预设值;其中,当所述调用状态标志值为第一预设值时,表示该目标函数未被其他线程调用;当所述调用状态标志值为第二预设值时,表示该目标函数整在被其他线程调用;若所述调用状态标志值所述为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述调用状态标志值,并将所述第一预设值赋值给一中间标志值;若所述调用状态标志值不为第一预设值,则在InterlockedCompareExchange函数执行的原子性操作中,将所述第二预设值赋值给所述中间标志值;
第二加锁执行模块,用于检测所述中间标志值是否为所述第一预设值;若所述中间标志值为所述第一预设值,则由该目标线程对所述目标函数进行读写操作;若所述中间标志值不为所述第一预设值,则继使所述第一加锁执行模块续循环执行检测所述调用状态标志值是否为第一预设值的步骤及该步骤之后的步骤;
其中,所述装置还包括:
解锁执行模块,用于在由该目标线程对所述目标函数进行读写操作之后,通过InterlockedCompareExchange函数执行原子性操作,将所述第一预设值赋值给所述目标函数的调用状态标志值。
5.根据权利要求4所述的装置,其特征在于,所述装置还包括:
初始化模块,用于在所述目标函数初始化时,将该目标函数的调用状态标志值配置为所述第一预设值。
6.根据权利要求4所述的装置,其特征在于,所述第二加锁执行模块在所述中间标志值为所述第一预设值时,具体用于跳出获得目标函数的调用权限的调用状态标志值,通过InterlockedCompareExchange函数执行原子性操作检测所述调用状态标志值是否为所述第一预设值的循环,并由该目标线程对所述目标函数进行读写操作。
7.一种机器可读存储介质,其特征在于,存储有可执行的指令,所述指令在被处理器调用或执行时,实现权利要求1-3中任意一项所述的方法。
8.一种电子设备,其特征在于,包括机器可读存储介质及处理器,所述机器可读存储介质存储有可执行指令,所述指令在被所述处理器执行时,促使所述电子设备实现权利要求1-3中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810252545.XA CN108491276B (zh) | 2018-03-26 | 2018-03-26 | 函数调用管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810252545.XA CN108491276B (zh) | 2018-03-26 | 2018-03-26 | 函数调用管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108491276A CN108491276A (zh) | 2018-09-04 |
CN108491276B true CN108491276B (zh) | 2021-04-27 |
Family
ID=63337742
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810252545.XA Active CN108491276B (zh) | 2018-03-26 | 2018-03-26 | 函数调用管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108491276B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113141235B (zh) * | 2020-01-20 | 2022-07-22 | 华为技术有限公司 | 处理数据的方法和相关装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7523122B2 (en) * | 2006-09-25 | 2009-04-21 | Microsoft Corporation | Automatic discovery of application settings' storage locations |
CN103294753A (zh) * | 2012-01-30 | 2013-09-11 | 辉达公司 | 无锁先入先出 |
CN104168217A (zh) * | 2014-08-15 | 2014-11-26 | 杭州华三通信技术有限公司 | 一种先入先出队列调度方法及装置 |
CN107077425A (zh) * | 2014-10-20 | 2017-08-18 | 微软技术许可有限责任公司 | 同步原语的按需扩展 |
-
2018
- 2018-03-26 CN CN201810252545.XA patent/CN108491276B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7523122B2 (en) * | 2006-09-25 | 2009-04-21 | Microsoft Corporation | Automatic discovery of application settings' storage locations |
CN103294753A (zh) * | 2012-01-30 | 2013-09-11 | 辉达公司 | 无锁先入先出 |
CN104168217A (zh) * | 2014-08-15 | 2014-11-26 | 杭州华三通信技术有限公司 | 一种先入先出队列调度方法及装置 |
CN107077425A (zh) * | 2014-10-20 | 2017-08-18 | 微软技术许可有限责任公司 | 同步原语的按需扩展 |
Also Published As
Publication number | Publication date |
---|---|
CN108491276A (zh) | 2018-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8839253B2 (en) | System and method for load-adaptive mutual exclusion with waiting process counts | |
CN104572568B (zh) | 读锁操作方法、写锁操作方法及系统 | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
US20090328041A1 (en) | Shared User-Mode Locks | |
US20210287716A1 (en) | Global Secondary Path Locking Technique Enabling High Read Concurrency For Read-Mostly Workloads | |
US20120192194A1 (en) | Lock Free Acquisition and Release of a Semaphore in a Multi-Core Processor Environment | |
CN109117201B (zh) | 一种程序退出的方法及相关设备 | |
US20120222051A1 (en) | Shared resource access verification | |
CN105824709B (zh) | 一种临界区访问方法及装置 | |
CN108491276B (zh) | 函数调用管理方法及装置 | |
CN108874446A (zh) | 多线程访问方法及装置 | |
CN101617322B (zh) | 信息处理装置、信息处理方法和程序 | |
CN110837422A (zh) | 多线程访问方法、系统、电子终端以及储存介质 | |
CN112015563A (zh) | 消息队列切换方法、装置、电子设备及存储介质 | |
WO2017044097A1 (en) | Request of an mcs lock by guests | |
US20140380327A1 (en) | Device and method for synchronizing tasks executed in parallel on a platform comprising several calculation units | |
Züpke | Deterministic fast user space synchronization | |
US10310916B2 (en) | Scalable spinlocks for non-uniform memory access | |
CN115599610A (zh) | 一种进程守护方法及电子设备 | |
US7539678B2 (en) | Systems and methods for controlling access to an object | |
CN115878336A (zh) | 锁操作中的信息处理方法、装置及计算设备 | |
CN111159782B (zh) | 安全任务处理方法和电子设备 | |
CN113961364A (zh) | 一种大规模锁系统实现方法、装置、存储介质和服务器 | |
CN112506626A (zh) | 一种应用程序的启动方法、计算机设备及存储介质 | |
CN112162845A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |