CN106407016A - 一种多线程争抢资源的模拟方法及装置 - Google Patents
一种多线程争抢资源的模拟方法及装置 Download PDFInfo
- Publication number
- CN106407016A CN106407016A CN201610913395.3A CN201610913395A CN106407016A CN 106407016 A CN106407016 A CN 106407016A CN 201610913395 A CN201610913395 A CN 201610913395A CN 106407016 A CN106407016 A CN 106407016A
- Authority
- CN
- China
- Prior art keywords
- operation function
- locked
- function
- threads
- thread
- 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.)
- Granted
Links
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 (11)
1.一种多线程争抢资源的模拟方法,其特征在于,所述方法包括:
当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;
确定所述运行函数被加锁的线程数量是否超过预设阈值;
若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
2.如权利要求1所述的方法,其特征在于,所述确定所述运行函数被加锁的线程数量是否超过预设阈值之后,还包括:
将被加锁的所有所述运行函数中第一个被加锁的运行函数的加锁时间点作为起始时间点,计算等待时间;
若所述运行函数被加锁的线程数量未超过所述预设阈值但所述等待时间超过预设时间范围,则释放被加锁的所有所述运行函数。
3.如权利要求1所述的方法,其特征在于,所述当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数之前,还包括:
对所述运行函数进行Hook以监控所述线程是否调用用于访问所述目标资源的所述运行函数;
所述当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数包括:
当检测到线程调用用于访问所述目标资源的所述运行函数时,使用Hook函数对所述线程所调用的所述运行函数进行加锁。
4.如权利要求1所述的方法,其特征在于,所述确定所述运行函数被加锁的线程数量是否超过预设阈值包括:
当每次检测到一个线程调用用于访问所述目标资源的所述运行函数时,通过预置计数器将所述预设阈值减1;
判断所述预设阈值是否减小至0。
5.如权利要求1-4任意一项所述的方法,其特征在于,所述同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源之后,还包括:
当检测到所述所有线程同时访问所述目标资源发生系统崩溃时,显示提示信息,所述提示信息用于提示用户多线程争抢资源是否模拟成功。
6.一种多线程争抢资源的模拟装置,其特征在于,所述装置包括:
函数处理模块,用于当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;
数量确定模块,用于确定所述运行函数被加锁的线程数量是否超过预设阈值;
资源访问模块,用于若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
7.如权利要求6所述的装置,其特征在于,
所述资源访问模块,还用于将被加锁的所有所述运行函数中第一个被加锁的运行函数的加锁时间点作为起始时间点,计算等待时间;若所述运行函数被加锁的线程数量未超过所述预设阈值但所述等待时间超过预设时间范围,则释放被加锁的所有所述运行函数。
8.如权利要求6所述的装置,其特征在于,所述函数处理模块具体用于:
对所述运行函数进行Hook以监控所述线程是否调用用于访问所述目标资源的所述运行函数;
当检测到线程调用用于访问所述目标资源的所述运行函数时,使用Hook函数对所述线程所调用的所述运行函数进行加锁。
9.如权利要求6所述的装置,其特征在于,所述数量确定模块具体用于:
当每次检测到一个线程调用用于访问所述目标资源的所述运行函数时,通过预置计数器将所述预设阈值减1;
判断所述预设阈值是否减小至0。
10.如权利要求6-9任意一项所述的装置,其特征在于,所述装置还包括:
信息显示模块,用于当检测到所述所有线程同时访问所述目标资源发生系统崩溃时,显示提示信息,所述提示信息用于提示用户多线程争抢资源是否模拟成功。
11.一种多线程争抢资源的模拟装置,其特征在于,所述装置包括接口电路、存储器以及处理器,其中,存储器中存储一组程序代码,且处理器用于调用存储器中存储的程序代码,用于执行以下操作:
当检测到线程调用用于访问目标资源的运行函数时,对所述线程所调用的所述运行函数进行加锁以停止执行所述运行函数,并统计所述运行函数被加锁的线程数量;
确定所述运行函数被加锁的线程数量是否超过预设阈值;
若所述运行函数被加锁的线程数量超过所述预设阈值,则释放被加锁的所有所述运行函数,并同步执行所释放的所有所述运行函数,以使调用所述所释放的运行函数的所有线程同时访问所述目标资源。
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 true CN106407016A (zh) | 2017-02-15 |
CN106407016B 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) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577525A (zh) * | 2017-08-22 | 2018-01-12 | 努比亚技术有限公司 | 一种创建并发线程的方法、装置及计算机可读存储介质 |
CN115543622A (zh) * | 2022-10-11 | 2022-12-30 | 天道金科股份有限公司 | 分布式环境下带计数时间戳的资源使用控制器及控制方法 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040044389A1 (en) * | 2002-08-30 | 2004-03-04 | Crawford Scott A. | Quick connect earhook system for BTE devices |
CN1917504A (zh) * | 2005-08-20 | 2007-02-21 | 中兴通讯股份有限公司 | 一种避免资源数据共享访问导致死锁的加锁方法 |
CN101753315A (zh) * | 2008-11-27 | 2010-06-23 | 百度在线网络技术(北京)有限公司 | DDoS攻击测试方法、装置和系统 |
CN102073588A (zh) * | 2010-12-28 | 2011-05-25 | 北京邮电大学 | 一种基于代码静态分析的多线程死锁检测方法及系统 |
US20120265946A1 (en) * | 2011-04-12 | 2012-10-18 | Appsense, Limited | Bypassing user mode redirection |
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 | 北京奇虎科技有限公司 | 一种禁止启动项启动的方法和装置 |
CN105068916A (zh) * | 2015-08-28 | 2015-11-18 | 福建六壬网安股份有限公司 | 一种基于内核hook的进程行为监控方法 |
CN105279016A (zh) * | 2014-07-21 | 2016-01-27 | 英特尔公司 | 线程暂停处理器、方法、系统及指令 |
-
2016
- 2016-10-19 CN CN201610913395.3A patent/CN106407016B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040044389A1 (en) * | 2002-08-30 | 2004-03-04 | Crawford Scott A. | Quick connect earhook system for BTE devices |
CN1917504A (zh) * | 2005-08-20 | 2007-02-21 | 中兴通讯股份有限公司 | 一种避免资源数据共享访问导致死锁的加锁方法 |
CN101753315A (zh) * | 2008-11-27 | 2010-06-23 | 百度在线网络技术(北京)有限公司 | DDoS攻击测试方法、装置和系统 |
CN102073588A (zh) * | 2010-12-28 | 2011-05-25 | 北京邮电大学 | 一种基于代码静态分析的多线程死锁检测方法及系统 |
US20120265946A1 (en) * | 2011-04-12 | 2012-10-18 | Appsense, Limited | Bypassing user mode redirection |
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 | 北京奇虎科技有限公司 | 一种禁止启动项启动的方法和装置 |
CN105068916A (zh) * | 2015-08-28 | 2015-11-18 | 福建六壬网安股份有限公司 | 一种基于内核hook的进程行为监控方法 |
Non-Patent Citations (3)
Title |
---|
DUANXZ: "ThreadPoolExecutor之三:自定义线程池-扩展示例", 《HTTPS://WWW.CNBLOGS.COM/DUANXZ/P/3380367.HTML》 * |
WLMMMM: "[Java]CountDownLatch 模拟高并发", 《HTTPS://BLOG.CSDN.NET/U012099869/ARTICLE/DETAILS/52769384》 * |
李大伟: "用Winsock在Internet上实现计算机远程控制", 《气象水文海洋仪器 》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577525A (zh) * | 2017-08-22 | 2018-01-12 | 努比亚技术有限公司 | 一种创建并发线程的方法、装置及计算机可读存储介质 |
CN107577525B (zh) * | 2017-08-22 | 2020-11-17 | 努比亚技术有限公司 | 一种创建并发线程的方法、装置及计算机可读存储介质 |
CN115543622A (zh) * | 2022-10-11 | 2022-12-30 | 天道金科股份有限公司 | 分布式环境下带计数时间戳的资源使用控制器及控制方法 |
CN115543622B (zh) * | 2022-10-11 | 2024-03-12 | 天道金科股份有限公司 | 分布式环境下带计数时间戳的资源使用控制器及控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106407016B (zh) | 2021-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106681811A (zh) | 基于线程池的多线程调度方法及装置 | |
US8601493B2 (en) | Application controlling apparatus and storage medium which stores software for the apparatus | |
US8839253B2 (en) | System and method for load-adaptive mutual exclusion with waiting process counts | |
US9250958B2 (en) | System, method, and apparatus for improving application-launch latencies | |
US5623670A (en) | Method and apparatus for crash safe enforcement of mutually exclusive access to shared resources in a multitasking computer system | |
JP6529586B2 (ja) | 複数の同時実行中スレッド間における共有可能リソースの排他的制御を管理するための方法、システム、およびコンピュータ・プログラム | |
CN102984029B (zh) | 应用于分布式系统的心跳检测装置和方法、网络设备 | |
CN106293979A (zh) | 检测进程无响应的方法和装置 | |
JP2003288237A (ja) | 制御装置における実行時間測定装置及び実行時間測定方法 | |
CN105074656B (zh) | 管理并发谓词表达式的方法和装置 | |
US20160179296A1 (en) | Method and device for video rendering | |
EP4036794A1 (en) | Crowd overdensity prediction method and device | |
CN105550041A (zh) | 一种移动终端控制方法及控制装置 | |
KR20170131366A (ko) | 공유 리소스 액세스 제어 방법 및 장치 | |
CN109522128B (zh) | 分段式多线程任务执行方法及装置 | |
CN105824709B (zh) | 一种临界区访问方法及装置 | |
CN106407016A (zh) | 一种多线程争抢资源的模拟方法及装置 | |
CN110851294B (zh) | 一种程序运行崩溃补救的方法及装置 | |
CN112546616B (zh) | 游戏技能处理方法、系统、装置及电子设备 | |
CN104750553B (zh) | 应用运行方法和装置 | |
CN106482742B (zh) | 计步数据的获取方法及装置 | |
CN109992388B (zh) | 一种用于核电厂安全级设备软件多任务管理系统 | |
CN110851286B (zh) | 线程管理方法、装置、电子设备及存储介质 | |
CN114003498A (zh) | 软件异常检测方法、装置和电子设备 | |
CN113220554B (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 |