CN106407016B - 一种多线程争抢资源的模拟方法及装置 - Google Patents
一种多线程争抢资源的模拟方法及装置 Download PDFInfo
- Publication number
- CN106407016B CN106407016B CN201610913395.3A CN201610913395A CN106407016B CN 106407016 B CN106407016 B CN 106407016B CN 201610913395 A CN201610913395 A CN 201610913395A CN 106407016 B CN106407016 B CN 106407016B
- Authority
- CN
- China
- Prior art keywords
- running
- locked
- function
- threads
- running function
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种多线程争抢资源的模拟方法,包括:当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;确定所述运行函数被加锁的线程数量是否超过预设阈值;若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。本发明实施例还公开了一种多线程争抢资源的模拟装置。采用本发明实施例,可以提高复现系统崩溃的概率。
Description
技术领域
本发明涉及电子技术领域,尤其涉及一种多线程争抢资源的模拟方法及装置。
背景技术
Android系统中对临界资源的访问,比如:更新UI(User Interface,用户界面)、操作非线程安全的数据结构等,这些逻辑正常情况下都需要加以同步,否则会引发多线程争抢资源导致的系统崩溃,但很多开发人员在开发过程中,并未注意到这一点,往往经过简单自测之后并没有引发系统崩溃,然而,在将产品发布到外网之后,由于用户的场景千差万别,很容易引发多线程争抢资源导致系统崩溃,因此,如何在测试过程中提高复现多线程争抢资源导致系统崩溃的概率,是一个亟需解决的问题。
发明内容
本发明实施例提供一种多线程争抢资源的模拟方法及装置。可以提高复现多线程争抢资源导致系统崩溃的概率。
本发明实施例提供了一种多线程争抢资源的模拟方法,包括:
当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;
确定所述运行函数被加锁的线程数量是否超过预设阈值;
若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
其中,所述确定所述运行函数被加锁的线程数量是否超过预设阈值之后,还包括:
将被加锁的所有所述运行函数中第一个被加锁的运行函数的加锁时间点作为起始时间点,计算等待时间;
若所述运行函数被加锁的线程数量未超过所述预设阈值但所述等待时间超过预设时间范围,则释放被加锁的所有所述运行函数。
其中,所述当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数之前,还包括:
对所述运行函数进行Hook以监控所述线程是否调用用于访问所述目标资源的运行函数;
所述当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数包括:
当检测到线程调用用于访问所述目标资源的运行函数时,使用Hook函数对所述线程所调用的所述运行函数进行加锁。
其中,所述确定所述运行函数被加锁的线程数量是否超过预设阈值包括:
当每次检测到一个线程调用用于访问所述目标资源的所述运行函数时,通过预置计数器将所述预设阈值减1;
判断所述预设阈值是否减小至0。
其中,所述同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源之后,还包括:
当检测到所述所有线程同时访问所述目标资源发生系统崩溃时,显示提示信息,所述提示信息用于提示用户多线程争抢资源是否模拟成功。
相应地,本发明实施例提供了一种多线程争抢资源的模拟装置,包括:
函数处理模块,用于当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;
数量确定模块,用于确定所述运行函数被加锁的线程数量是否超过预设阈值;
资源访问模块,用于若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
其中,所述资源访问模块,还用于将被加锁的所有所述运行函数中第一个被加锁的运行函数的加锁时间点作为起始时间点,计算等待时间;若所述运行函数被加锁的线程数量未超过所述预设阈值但所述等待时间超过预设时间范围,则释放被加锁的所有所述运行函数。
其中,所述函数处理模块具体用于:
对所述运行函数进行Hook以监控所述线程是否调用用于访问所述目标资源的运行函数;
当检测到线程调用用于访问目标资源的运行函数时,使用Hook函数对所述线程所调用的所述运行函数进行加锁。
其中,所述数量确定模块具体用于:
当每次检测到一个线程调用用于访问所述目标资源的所述运行函数,通过预置计数器将所述预设阈值减1;
判断所述预设阈值是否减小至0。
其中,所述装置还包括:
信息显示模块,用于当检测到所述所有线程同时访问所述目标资源发生系统崩溃时,显示提示信息,所述提示信息用于提示用户多线程争抢资源是否模拟成功。
相应地,本发明实施例提供了一种多线程争抢资源的模拟装置,所述装置包括接口电路、存储器以及处理器,其中,存储器中存储一组程序代码,且处理器用于调用存储器中存储的程序代码,用于执行以下操作:
当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;
确定所述运行函数被加锁的线程数量是否超过预设阈值;
若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
实施本发明实施例,首先当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;然后确定所述运行函数被加锁的线程数量是否超过预设阈值;最后若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源,通过在测试过程中模拟多个线程同时争抢资源,从而提高复现多线程争抢资源导致系统崩溃的概率,帮助开发人员定位到多线程同步的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提出的一种多线程争抢资源的模拟方法的第一实施例的流程示意图;
图2是本发明提出的一种多线程争抢资源的模拟方法的第二实施例的流程示意图;
图3是本发明实施例提出的一种多线程争抢资源的模拟装置的结构示意图;
图4是本发明实施例提出的另一种多线程争抢资源的模拟装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,图1是本发明提出的一种多线程争抢资源的模拟方法的第一实施例的流程示意图。如图所示,本发明实施例中的方法包括:
S101,当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量。
具体实现中,可以对所述运行函数进行Hook以监控所述线程是否调用用于访问所述目标资源的运行函数;当检测到线程调用用于访问目标资源的运行函数时,使用Hook函数对所述线程所调用的所述运行函数进行加锁。
可选的,当检测到线程调用用于访问目标资源的运行函数时,可以首先确定线程所调用的运行函数是否已加锁,若线程所调用的运行函数未加锁,可以对线程所调用的运行函数进行加锁,如果线程所调用的运行函数已加锁,则继续检测是否存在新线程调用运行函数将要访问目标资源。
需要说明的是,Hook(钩子)是系统消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定函数的行为动作,而且所监视的指定函数可以是其他线程所创建的,在执行处理该指定函数之前可以先处理线程信息。另外,Hook机制允许应用程序截获处理Window消息或特定事件,钩子实际上是一个处理消息的程序段,通过系统调用,将Hook函数挂入系统,在执行卸载键盘布局之前,Hook函数就先捕获线程信息,进而Hook函数可以加工处理该线程信息,也可以不作处理而继续传递该线程信息,还可以强制结束该线程信息的传递。
S102,确定所述运行函数被加锁的线程数量是否超过预设阈值。
具体实现中,当每次检测到一个线程调用用于访问所述目标资源的所述运行函数时,通过预置计数器将所述预设阈值减1;判断所述预设阈值是否减小至0。例如,将计数器的初始值设置为5,表示最多允许5个线程同时访问目标资源,每次有新线程请求时,将计数器的数值减1,并判断计数器设置的初始值是否减小至0。
S103,若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
例如,当计数器的数值减小至0时,同时释放将要访问所述目标资源的5个线程调用运行函数,执行每个线程所调用的运行函数同时访问目标资源,模拟出5个线程争抢目标资源的场景,从而确定在5个线程争抢目标资源时是否发生系统崩溃,提高复现多线程争抢资源导致系统崩溃的概率,帮助开发人员定位到多线程同步的问题。
可选的,可以将被加锁的所有所述运行函数中第一个被加锁的运行函数的加锁时间点作为起始时间点,计算等待时间;若所述运行函数被加锁的线程数量未超过所述预设阈值但所述等待时间超过预设时间范围,则释放被加锁的所有所述运行函数。
需要说明的是,为了防止将要调用目标资源的线程数达不到计数器的初始值,可以通过计时器设定一个时间范围,如果在预设时间范围内所述运行函数被加锁的线程数量超过预设阈值,则立刻释放所有线程所调用的运行函数,如果将要访问所述目标资源的线程数量未超过预设阈值但等待时间超过预设时间范围,也立刻释放所有线程所调用的运行函数,防止出现线程长时间不能执行运行函数的问题,也能起到延迟线程执行的作用。
在本发明实施例中,首先当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;然后确定所述运行函数被加锁的线程数量是否超过预设阈值;最后若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源,通过在测试过程中模拟多个线程同时争抢资源,从而提高复现多线程争抢资源导致系统崩溃的概率,帮助开发人员定位到多线程同步的问题。
请参考图2,图2是本发明提出的一种多线程争抢资源的模拟方法的第二实施例的流程示意图。如图所示,本发明实施例中的方法包括:
S201,当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量。
具体实现中,可以对所述运行函数进行Hook以监控所述线程是否调用用于访问所述目标资源的运行函数;当检测到线程调用用于访问目标资源的运行函数时,使用Hook函数对所述线程所调用的所述运行函数进行加锁。
可选的,当检测到线程调用用于访问目标资源的运行函数时,可以首先确定线程所调用的运行函数是否已加锁,若线程所调用的运行函数未加锁,可以对线程所调用的运行函数进行加锁,如果线程所调用的运行函数已加锁,则检测是否存在新线程调用运行函数将要访问目标资源。
需要说明的是,Hook(钩子)是系统消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定函数的行为动作,而且所监视的指定函数可以是其他线程所创建的,在执行处理该指定函数之前可以先处理线程信息。另外,Hook机制允许应用程序截获处理Window消息或特定事件,钩子实际上是一个处理消息的程序段,通过系统调用,将Hook函数挂入系统,在执行卸载键盘布局之前,Hook函数就先捕获线程信息,进而Hook函数可以加工处理该线程信息,也可以不作处理而继续传递该线程信息,还可以强制结束该线程信息的传递。
S202,确定所述运行函数被加锁的线程数量是否超过预设阈值。
具体实现中,当每次检测到一个线程调用用于访问所述目标资源的所述运行函数时,通过预置计数器将所述预设阈值减1;判断所述预设阈值是否减小至0。例如,将计数器的初始值设置为5,表示最多允许5个线程同时访问目标资源,每次有新线程请求时,将计数器的数值减1,并判断计数器设置的初始值是否减小至0。
S203,若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
例如,当计数器的数值减小至0时,同时释放将要访问所述目标资源的5个线程调用运行函数,执行每个线程所调用的运行函数同时访问目标资源,模拟出5个线程争抢目标资源的场景,从而确定在5个线程争抢目标资源时是否发生系统崩溃,提高复现多线程争抢资源导致系统崩溃的概率。
可选的,将被加锁的所有所述运行函数中第一个被加锁的运行函数的加锁时间点作为起始时间点,计算等待时间;若所述运行函数被加锁的线程数量未超过所述预设阈值但所述等待时间超过预设时间范围,则释放被加锁的所有所述运行函数。
需要说明的是,为了防止将要调用目标资源的线程数达不到计数器的初始值,可以通过计时器设定一个时间范围,如果在预设时间范围内所述运行函数被加锁的线程数量超过预设阈值,则立刻释放所有线程所调用的运行函数,如果将要访问所述目标资源的线程数量未超过预设阈值但等待时间超过预设时间范围,也立刻释放所有线程所调用的运行函数,防止出现线程长时间不能执行运行函数的问题,也能起到延迟线程执行的作用。
S204,当检测到所述所有线程同时访问所述目标资源发生系统崩溃时,显示提示信息,所述提示信息用于提示用户多线程争抢资源是否模拟成功。
具体实现中,如果提示信息为系统发生崩溃,则说明程序开发过程中没有对多线程进行同步操作,因此在多线程争抢资源时发生系统崩溃,如果提示为系统没有发生崩溃,则说明程序开发过程中已经对多线程进行了同步操作,因此在多线程争抢资源时未发生系统崩溃。
在本发明实施例中,首先当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;然后确定所述运行函数被加锁的线程数量是否超过预设阈值;最后若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源,通过在测试过程中模拟多个线程同时争抢资源,从而提高复现多线程争抢资源导致系统崩溃的概率,帮助开发人员定位到多线程同步的问题。
请参考图3,图3是本发明实施例提供的一种多线程争抢资源的模拟装置的结构示意图。如图所示,本发明实施例中的装置包括:
函数处理模块301,用于当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量。
具体实现中,可以对所述运行函数进行Hook以监控所述线程是否调用用于访问所述目标资源的运行函数;当检测到线程调用用于访问目标资源的运行函数时,使用Hook函数对所述线程所调用的所述运行函数进行加锁。
可选的,当检测到线程调用用于访问目标资源的运行函数时,可以首先确定线程所调用的运行函数是否已加锁,若线程所调用的运行函数未加锁,可以对线程所调用的运行函数进行加锁,如果线程所调用的运行函数已加锁,则检测是否存在新线程调用运行函数将要访问目标资源。
需要说明的是,Hook(钩子)是系统消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定函数的行为动作,而且所监视的指定函数可以是其他线程所创建的,在执行处理该指定函数之前可以先处理线程信息。另外,Hook机制允许应用程序截获处理Window消息或特定事件,钩子实际上是一个处理消息的程序段,通过系统调用,将Hook函数挂入系统,在执行卸载键盘布局之前,Hook函数就先捕获线程信息,进而Hook函数可以加工处理该线程信息,也可以不作处理而继续传递该线程信息,还可以强制结束该线程信息的传递。
数量确定模块302,用于确定所述运行函数被加锁的线程数量是否超过预设阈值。
具体实现中,当每次检测到一个线程调用用于访问所述目标资源的所述运行函数,通过预置计数器将所述预设阈值减1;判断所述预设阈值是否减小至0。例如,将计数器的初始值设置为5,表示最多允许5个线程同时访问目标资源,每次有新线程请求时,将计数器的数值减1,并判断计数器设置的初始值是否减小至0。
资源访问模块303,用于若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
例如,当计数器的数值减小至0时,同时释放将要访问所述目标资源的5个线程调用运行函数,执行每个线程所调用的运行函数同时访问目标资源,模拟出5个线程争抢目标资源的场景,从而确定在5个线程争抢目标资源时是否发生系统崩溃,提高复现多线程争抢资源导致系统崩溃的概率。
可选的,将被加锁的所有所述运行函数中第一个被加锁的运行函数的加锁时间点作为起始时间点,计算等待时间;若所述运行函数被加锁的线程数量未超过所述预设阈值但所述等待时间超过预设时间范围,则释放被加锁的所有所述运行函数。
需要说明的是,为了防止将要调用目标资源的线程数达不到计数器的初始值,可以通过计时器设定一个时间范围,如果在预设时间范围内所述运行函数被加锁的线程数量超过预设阈值,则立刻释放所有线程所调用的运行函数,如果将要访问所述目标资源的线程数量未超过预设阈值但等待时间超过预设时间范围,也立刻释放所有线程所调用的运行函数,防止出现线程长时间不能执行运行函数的问题,也能起到延迟线程执行的作用。
可选的,如图3所示,本发明实施例中的装置还可以包括:
信息显示模块304,用于当检测到所述所有线程同时访问所述目标资源发生系统崩溃时,显示提示信息,所述提示信息用于提示用户多线程争抢资源是否模拟成功。
具体实现中,如果提示信息为系统发生崩溃,则说明程序开发过程中没有对多线程进行同步操作,因此在多线程争抢资源时发生系统崩溃,如果提示为系统没有发生崩溃,则说明程序开发过程中已经对多线程进行了同步操作,因此在多线程争抢资源时未发生系统崩溃。
在本发明实施例中,首先当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;然后确定所述运行函数被加锁的线程数量是否超过预设阈值;最后若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源,通过在测试过程中模拟多个线程同时争抢资源,从而提高复现多线程争抢资源导致系统崩溃的概率,帮助开发人员定位到多线程同步的问题。
请参考图4,图4是本发明实施例提出的另一种多线程争抢资源的模拟装置的结构示意图。如图所示,该装置可以包括:至少一个处理器401,例如CPU,至少一个通信接口402,至少一个存储器403,至少一个总线404。其中,总线404用于实现这些组件之间的连接通信。其中,本发明实施例中装置的通信接口402是有线发送端口,也可以为无线设备,例如包括天线装置,用于与其他节点设备进行信令或数据的通信。存储器403可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器403可选的还可以是至少一个位于远离前述处理器401的存储装置。存储器403中存储一组程序代码,且处理器401用于调用存储器中存储的程序代码,用于执行以下操作:
当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;
确定所述运行函数被加锁的线程数量是否超过预设阈值;
若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
其中,处理器401还用于执行如下操作步骤:
将被加锁的所有所述运行函数中第一个被加锁的运行函数的加锁时间点作为起始时间点,计算等待时间;
若所述运行函数被加锁的线程数量未超过所述预设阈值但所述等待时间超过预设时间范围,则释放被加锁的所有所述运行函数。
其中,处理器401还用于执行如下操作步骤:
对所述运行函数进行Hook以监控所述线程是否调用用于访问所述目标资源的运行函数;
当检测到线程调用用于访问目标资源的运行函数时,使用Hook函数对所述线程所调用的所述运行函数进行加锁。
其中,处理器401还用于执行如下操作步骤:
当每次检测到一个线程调用用于访问所述目标资源的所述运行函数,通过预置计数器将所述预设阈值减1;
判断所述预设阈值是否减小至0。
其中,处理器401还用于执行如下操作步骤:
当检测到所述所有线程同时访问所述目标资源发生系统崩溃时,显示提示信息,所述提示信息用于提示用户多线程争抢资源是否模拟成功。
需要说明的是,对于前述的各个方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某一些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其他实施例的相关描述。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:Random Access Memory,简称:RAM)、磁盘或光盘等。
以上对本发明实施例所提供的内容下载方法及相关设备、系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种多线程争抢资源的模拟方法,其特征在于,所述方法包括:
对运行函数进行Hook以监控线程是否调用用于访问目标资源的运行函数;
当检测到线程调用用于访问目标资源的运行函数时,确定所述运行函数是否已加锁,若所述运行函数未加锁,则使用Hook函数对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,若所述运行函数已加锁,则继续检测是否存在新线程调用用于访问目标资源的所述运行函数;
统计所述运行函数被加锁的线程数量;
通过计时器设定一个时间范围,并确定在所述时间范围内所述运行函数被加锁的线程数量是否超过预设阈值;
若在所述时间范围内所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有线程所调用的运行函数,或若所述运行函数被加锁的线程数量未超过所述预设阈值、但第一个被加锁的运行函数的等待时间超过所述时间范围,则释放被加锁的所有所述运行函数;同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
2.如权利要求1所述的方法,其特征在于,所述确定所述运行函数被加锁的线程数量是否超过预设阈值包括:
当每次检测到一个线程调用用于访问所述目标资源的所述运行函数时,通过预置计数器将所述预设阈值减1;
判断所述预设阈值是否减小至0。
3.如权利要求1-2任意一项所述的方法,其特征在于,所述同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源之后,还包括:
当检测到所述所有线程同时访问所述目标资源发生系统崩溃时,显示提示信息,所述提示信息用于提示用户多线程争抢资源是否模拟成功。
4.一种多线程争抢资源的模拟装置,其特征在于,所述装置包括:
函数处理模块,用于当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;
数量确定模块,用于通过计时器设定一个时间范围,并确定在所述时间范围内所述运行函数被加锁的线程数量是否超过预设阈值;
资源访问模块,用于若在所述时间范围内所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有线程所调用的运行函数;或若所述运行函数被加锁的线程数量未超过所述预设阈值但但第一个被加锁的运行函数的等待时间超过所述时间范围,则释放被加锁的所有所述运行函数;同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源;
所述函数处理模块具体用于:
对所述运行函数进行Hook以监控所述线程是否调用用于访问所述目标资源的所述运行函数;
当检测到线程调用用于访问所述目标资源的所述运行函数时,确定所述运行函数是否已加锁,若所述运行函数未加锁,则使用Hook函数对所述线程所调用的所述运行函数进行加锁,若所述运行函数已加锁,则继续检测是否存在新线程调用用于访问目标资源的所述运行函数。
5.如权利要求4所述的装置,其特征在于,所述数量确定模块具体用于:
当每次检测到一个线程调用用于访问所述目标资源的所述运行函数时,通过预置计数器将所述预设阈值减1;
判断所述预设阈值是否减小至0。
6.如权利要求4-5任意一项所述的装置,其特征在于,所述装置还包括:
信息显示模块,用于当检测到所述所有线程同时访问所述目标资源发生系统崩溃时,显示提示信息,所述提示信息用于提示用户多线程争抢资源是否模拟成功。
7.一种多线程争抢资源的模拟装置,其特征在于,所述装置包括接口电路、存储器以及处理器,其中,存储器中存储一组程序代码,且处理器用于调用存储器中存储的程序代码,用于执行以下操作:
对运行函数进行Hook以监控线程是否调用用于访问目标资源的运行函数;
当检测到线程调用用于访问目标资源的运行函数时,确定所述运行函数是否已加锁,若所述运行函数未加锁,则使用Hook函数对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,若所述运行函数已加锁,则继续检测是否存在新线程调用用于访问目标资源的所述运行函数;
统计所述运行函数被加锁的线程数量;
通过计时器设定一个时间范围,并确定在所述时间范围内所述运行函数被加锁的线程数量是否超过预设阈值;
若在所述时间范围内所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有线程所调用的运行函数;或若所述运行函数被加锁的线程数量未超过所述预设阈值、但第一个被加锁的运行函数的等待时间超过所述时间范围,则释放被加锁的所有所述运行函数;同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
8.一种计算机可读存储介质,其特征在于,用于存储指令,当所述指令在计算机上运行时,使所述计算机执行权利要求1至3中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610913395.3A CN106407016B (zh) | 2016-10-19 | 2016-10-19 | 一种多线程争抢资源的模拟方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610913395.3A CN106407016B (zh) | 2016-10-19 | 2016-10-19 | 一种多线程争抢资源的模拟方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106407016A CN106407016A (zh) | 2017-02-15 |
CN106407016B true CN106407016B (zh) | 2021-06-25 |
Family
ID=58012199
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610913395.3A Active CN106407016B (zh) | 2016-10-19 | 2016-10-19 | 一种多线程争抢资源的模拟方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106407016B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577525B (zh) * | 2017-08-22 | 2020-11-17 | 努比亚技术有限公司 | 一种创建并发线程的方法、装置及计算机可读存储介质 |
CN115543622B (zh) * | 2022-10-11 | 2024-03-12 | 天道金科股份有限公司 | 分布式环境下带计数时间戳的资源使用控制器及控制方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1917504A (zh) * | 2005-08-20 | 2007-02-21 | 中兴通讯股份有限公司 | 一种避免资源数据共享访问导致死锁的加锁方法 |
CN102073588A (zh) * | 2010-12-28 | 2011-05-25 | 北京邮电大学 | 一种基于代码静态分析的多线程死锁检测方法及系统 |
CN103034584A (zh) * | 2012-12-05 | 2013-04-10 | 曙光信息产业(北京)有限公司 | 测试分布式锁的方法和装置 |
CN103729329A (zh) * | 2012-10-12 | 2014-04-16 | 深圳市中兴微电子技术有限公司 | 核间通信装置及方法 |
CN104133750A (zh) * | 2014-08-20 | 2014-11-05 | 浪潮(北京)电子信息产业有限公司 | 主机与存储设备兼容适配测试方法和系统 |
CN104461862A (zh) * | 2014-10-23 | 2015-03-25 | 中标软件有限公司 | 数据处理系统以及线程崩溃后的资源恢复方法和装置 |
CN104572199A (zh) * | 2014-12-31 | 2015-04-29 | 北京奇虎科技有限公司 | 一种禁止启动项启动的方法和装置 |
CN105279016A (zh) * | 2014-07-21 | 2016-01-27 | 英特尔公司 | 线程暂停处理器、方法、系统及指令 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7142926B2 (en) * | 2002-08-30 | 2006-11-28 | Advanced Bionics Corporation | Quick connect earhook system for BTE devices |
CN101753315B (zh) * | 2008-11-27 | 2011-09-21 | 百度在线网络技术(北京)有限公司 | DDoS攻击测试方法、装置和系统 |
US20120265946A1 (en) * | 2011-04-12 | 2012-10-18 | Appsense, Limited | Bypassing user mode redirection |
CN105068916B (zh) * | 2015-08-28 | 2017-12-08 | 福建六壬网安股份有限公司 | 一种基于内核hook的进程行为监控方法 |
-
2016
- 2016-10-19 CN CN201610913395.3A patent/CN106407016B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1917504A (zh) * | 2005-08-20 | 2007-02-21 | 中兴通讯股份有限公司 | 一种避免资源数据共享访问导致死锁的加锁方法 |
CN102073588A (zh) * | 2010-12-28 | 2011-05-25 | 北京邮电大学 | 一种基于代码静态分析的多线程死锁检测方法及系统 |
CN103729329A (zh) * | 2012-10-12 | 2014-04-16 | 深圳市中兴微电子技术有限公司 | 核间通信装置及方法 |
CN103034584A (zh) * | 2012-12-05 | 2013-04-10 | 曙光信息产业(北京)有限公司 | 测试分布式锁的方法和装置 |
CN105279016A (zh) * | 2014-07-21 | 2016-01-27 | 英特尔公司 | 线程暂停处理器、方法、系统及指令 |
CN104133750A (zh) * | 2014-08-20 | 2014-11-05 | 浪潮(北京)电子信息产业有限公司 | 主机与存储设备兼容适配测试方法和系统 |
CN104461862A (zh) * | 2014-10-23 | 2015-03-25 | 中标软件有限公司 | 数据处理系统以及线程崩溃后的资源恢复方法和装置 |
CN104572199A (zh) * | 2014-12-31 | 2015-04-29 | 北京奇虎科技有限公司 | 一种禁止启动项启动的方法和装置 |
Non-Patent Citations (2)
Title |
---|
[Java]CountDownLatch 模拟高并发;wlmmmm;《https://blog.csdn.net/u012099869/article/details/52769384》;20161009;第1-3页 * |
ThreadPoolExecutor之三:自定义线程池-扩展示例;duanxz;《https://www.cnblogs.com/duanxz/p/3380367.html》;20131021;第1-5页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106407016A (zh) | 2017-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10838838B2 (en) | Method and apparatus for dealing with abnormality of application program and storage medium | |
CN107766101B (zh) | App启动事件的处理方法、装置和设备 | |
CN106681811B (zh) | 基于线程池的多线程调度方法及装置 | |
US20140143791A1 (en) | System, method, and apparatus for improving application-launch latencies | |
CN107408016B (zh) | 使用处理器事务性内存支持的内存访问保护 | |
CN109189496B (zh) | 应用程序的动态库信息获取方法及装置 | |
CN106407016B (zh) | 一种多线程争抢资源的模拟方法及装置 | |
US9727351B2 (en) | Method and device for setting status of application | |
CN113467981A (zh) | 异常处理的方法和装置 | |
CN113190427B (zh) | 卡顿监控方法、装置、电子设备及存储介质 | |
CN110083355B (zh) | 一种app页面的处理方法及装置 | |
CN109344634B (zh) | 应用的权限授予方法、装置、终端及计算机可读存储介质 | |
CN111078382A (zh) | 一种命令超时处理方法及装置 | |
CN110674050A (zh) | 内存越界检测方法、装置、电子设备及计算机存储介质 | |
CN110659082A (zh) | 应用程序界面的显示方法、装置、终端及存储介质 | |
CN107391267B (zh) | 一种进程检测方法、装置和电子设备、可读存储介质 | |
CN113609478B (zh) | 一种ios平台应用程序篡改检测方法及装置 | |
CN112162845B (zh) | 一种业务进程同步的方法及装置 | |
CN112989323B (zh) | 进程检测方法、装置、终端及存储介质 | |
CN114564720A (zh) | 程序文件审核方法、装置、电子设备及存储介质 | |
CN109828907B (zh) | 概率性测试方法、装置、计算机装置、及可读存储介质 | |
CN109819330B (zh) | 直播间跳转方法、装置、设备和存储介质 | |
CN115878336A (zh) | 锁操作中的信息处理方法、装置及计算设备 | |
CN112269663A (zh) | 安卓系统资源管理方法、装置、终端设备和可读存储介质 | |
CN112579938A (zh) | 一种页面加载方法、装置、存储介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | 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 |