CN111475300A - 一种多线程多任务管理方法及终端 - Google Patents
一种多线程多任务管理方法及终端 Download PDFInfo
- Publication number
- CN111475300A CN111475300A CN202010273037.7A CN202010273037A CN111475300A CN 111475300 A CN111475300 A CN 111475300A CN 202010273037 A CN202010273037 A CN 202010273037A CN 111475300 A CN111475300 A CN 111475300A
- Authority
- CN
- China
- Prior art keywords
- task
- queue
- task queue
- executing
- 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
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
- 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
-
- 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/5018—Thread allocation
-
- 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
- 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
本发明公开了一种多线程多任务的管理方法及终端,根据任务个数创建对应个数的任务线程,初始状态为阻塞,并为每个任务线程创建对应的任务队列;为每个任务队列建立对应的任务队列指针以存放所述任务队列;接收任务处理请求,根据所述任务处理请求中的任务标识确定对应的任务队列指针以获取对应的任务队列,根据所获取的对应的任务队列的状态对所述任务处理请求进行响应;线程的初始状态为阻塞,能够快速对任务进行响应;采用任务ID进行标识,方便任务的写入和读取,进一步提高了任务的处理效率,保证了数据的时效性和无人驾驶操作的即时性,确保车辆的安全。
Description
技术领域
本发明涉及线程管理领域,尤其涉及一种多线程多任务管理方法及终端。
背景技术
无人驾驶系统对数据的实时性要求较高,而现有的无人驾驶系统大多为嵌入式系统,其性能和可使用资源都具有局限性,无法给线程管理分配较多资源,现有对多线程的管理大都采用线程池的方法,但在无人驾驶系统中,线程的总数较少,采用线程池的方式对多线程进行管理会造成系统资源的浪费,同时也延长了系统的响应时间。
发明内容
本发明所要解决的技术问题是:提供一种多线程多任务管理方法及终端,提高无人驾驶系统中应用程序的运行速度,保证数据的时效性。
为了解决上述技术问题,本发明采用的一种技术方案为:
一种多线程多任务管理方法,包括步骤:
S1、根据任务个数创建对应个数的任务线程,初始状态为阻塞,并为每个任务线程创建对应的任务队列;
S2、为每个任务队列建立对应的任务队列指针以存放所述任务队列;
S3、接收任务处理请求,根据所述任务处理请求中的任务标识确定对应的任务队列指针以获取对应的任务队列,根据所获取的对应的任务队列的状态对所述任务处理请求进行响应。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种多线程多任务管理终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、根据任务个数创建对应个数的任务线程,初始状态为阻塞,并为每个任务线程创建对应的任务队列;
S2、为每个任务队列建立对应的任务队列指针以存放所述任务队列;
S3、接收任务处理请求,根据所述任务处理请求中的任务标识确定对应的任务队列指针以获取对应的任务队列,根据所获取的对应的任务队列的状态对所述任务处理请求进行响应。
本发明的有益效果在于:根据任务个数创建对应个数的任务线程,并为每个任务线程创建对应的任务队列,将任务队列存放至对应的任务队列指针中,同时设置任务线程的初始状态为阻塞状态,根据任务队列指针获取对应的任务队列,并基于对应的任务队列的状态来响应任务处理请求,一方面使得各个任务都明确化,所有任务线程都处于时刻准备执行的状态,提高了数据响应的高效性,另一方面为每个任务线程都创建其对应的任务队列,并通过指针方便实现数据读取和写入,避免了因互斥造成线程等待资源的情况,进一步加速了任务的处理速度,同时使无任务的线程都处于阻塞状态,占用了较少的资源,节省了线程状态改变的时间,进一步提高了处理任务的效率,提高了无人驾驶系统中应用程序的运行速度,保证数据的时效性。
附图说明
图1为本发明实施例的一种多线程多任务管理方法的步骤流程图;
图2为本发明实施例的一种多线程多任务管理终端的结构示意图;
图3为本发明实施例的任务队列结构示意图;
图4为本发明实施例的一种多线程多任务管理方法的总流程示意图;
图5为本发明实施例的任务队列创建过程示意图;
图6为本发明实施例的任务写入过程示意图;
图7为本发明实施例的任务读取过程示意图;
标号说明:
1、一种多线程多任务管理终端;2、处理器;3、存储器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
请参照图1,一种多线程多任务管理方法,包括步骤:
S1、根据任务个数创建对应个数的任务线程,初始状态为阻塞,并为每个任务线程创建对应的任务队列;
S2、为每个任务队列建立对应的任务队列指针以存放所述任务队列;
S3、接收任务处理请求,根据所述任务处理请求中的任务标识确定对应的任务队列指针以获取对应的任务队列,根据所获取的对应的任务队列的状态对所述任务处理请求进行响应。
从上述描述可知,本发明的有益效果在于:根据任务个数创建对应个数的任务线程,并为每个任务线程创建对应的任务队列,将任务队列存放至对应的任务队列指针中,同时设置任务线程的初始状态为阻塞状态,根据任务队列指针获取对应的任务队列,并基于对应的任务队列的状态来响应任务处理请求,一方面使得各个任务都明确化,所有任务线程都处于时刻准备执行的状态,提高了数据响应的高效性,另一方面为每个任务线程都创建其对应的任务队列,并通过指针方便实现数据读取和写入,避免了因互斥造成线程等待资源的情况,进一步加速了任务的处理速度,同时使无任务的线程都处于阻塞状态,占用了较少的资源,节省了线程状态改变的时间,进一步提高了处理任务的效率,提高了无人驾驶系统中应用程序的运行速度,保证数据的时效性。
进一步的,所述S1中为每个任务线程创建对应的任务队列具体为:
S11、给每个任务线程分配对应的任务ID,所述任务ID为大于0的整数且不同的任务线程对应的任务ID互不相同;
S12、获取要创建任务队列的任务线程对应的任务ID,判断所述任务ID是否处于预设范围内,若是,则执行步骤S13,若否,则结束此次过程;
S13、根据所述任务ID,创建对应的任务队列,并为所述任务队列分配队列空间,初始化线程锁及读写队列的条件。
由上述描述可知,采用任务ID对不同的任务线程和其对应的任务队列进行区分和标记,便于读写任务,以任务ID的阈值对线程数量进行控制,防止系统资源过载,为每一任务队列配备线程锁,保护读写操作互不干扰。
进一步的,所述步骤S2还包括:
创建任务指针数组,将每个任务队列对应的任务队列指针存入所述任务指针数组。
由上述描述可知,创建任务指针数组存储每个任务队列对应的任务队列指针,方便在不同场景下调用任务队列,能够快速完成响应且不易出错。
进一步的,所述步骤S3包括:
S311、接收任务写入请求,根据所述任务写入请求中获取对应的任务ID;
S312、判断所述任务ID是否在预设范围内,若是,执行S313,否则发送写入失败提示;
S313、根据所述任务ID,确定其对应的任务队列指针;
S314、通过所述任务队列指针,确定任务队列并对其线程锁上锁,判断所述任务队列中是否还有剩余空间,若是,则执行S316,否则,执行S315;
S315、解除所述任务队列的线程锁,并进入等待状态,当接收到任务可写入信号时执行所述S316;
S316、写入所述任务写入请求中的任务,发送任务可读取信号并解除所述任务队列的线程锁。
由上述描述可知,在任务写入过程中,以任务ID为标识,查找对应的任务队列指针,进而确定对应的任务队列,保证将任务准确写入对应的任务队列中,在执行写入操作时设置线程锁,保护写入操作不被外部因素影响,保证写入内容的正确和完整;写入操作不能及时进行时,挂起等待写入信号,保证了写入的效率。
进一步的,所述步骤S3包括:
S321、接收任务读取请求,根据所述任务写入请求中获取对应的任务ID;
S322、判断所述任务ID是否在预设范围内,若是,则执行步骤S323,否则,发送读取失败提示;
S323、根据所述任务ID,确定对应的任务队列指针;
S324、通过所述任务队列指针,确定对应的任务队列并对其线程锁上锁,判断所述任务队列中是否有写入的任务,若是,则执行步骤S326,否则,执行步骤S325;
S325、解除所述任务队列的线程锁,并进入等待状态,当接收到任务可读取信号时执行所述步骤S326;
S326、读取所述任务读取请求中的任务,并释放所读取的任务的空间,发送任务可写入信号并解除所述任务队列的线程锁。
由上述描述可知,任务线程以任务ID为标识读取对应的任务队列中被写入的任务,任务线程与任务队列一一对应,线程获取资源时不需要互相等待,加快了任务的处理过程,在读取任务的过程中,为任务队列加上线程锁,保证了读取过程的稳定。
请参照图2,一种多线程多任务管理终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、根据任务个数创建对应个数的任务线程,初始状态为阻塞,并为每个任务线程创建对应的任务队列;
S2、为每个任务队列建立对应的任务队列指针以存放所述任务队列;
S3、接收任务处理请求,根据所述任务处理请求中的任务标识确定对应的任务队列指针以获取对应的任务队列,根据所获取的对应的任务队列的状态对所述任务处理请求进行响应。
本发明的有益效果在于:根据任务个数创建对应个数的任务线程,并为每个任务线程创建对应的任务队列,将任务队列存放至对应的任务队列指针中,同时设置任务线程的初始状态为阻塞状态,根据任务队列指针获取对应的任务队列,并基于对应的任务队列的状态来响应任务处理请求,一方面使得各个任务都明确化,所有任务线程都处于时刻准备执行的状态,提高了数据响应的高效性,另一方面为每个任务线程都创建其对应的任务队列,并通过指针方便实现数据读取和写入,避免了因互斥造成线程等待资源的情况,进一步加速了任务的处理速度,同时使无任务的线程都处于阻塞状态,占用了较少的资源,节省了线程状态改变的时间,进一步提高了处理任务的效率,提高了无人驾驶系统中应用程序的运行速度,保证数据的时效性。
进一步的,所述S1中为每个任务线程创建对应的任务队列具体为:
S11、给每个任务线程分配对应的任务ID,所述任务ID为大于0的整数且不同的任务线程对应的任务ID互不相同;
S12、获取要创建任务队列的任务线程对应的任务ID,判断所述任务ID是否处于预设范围内,若是,则执行步骤S13,若否,则结束此次过程;
S13、根据所述任务ID,创建对应的任务队列,并为所述任务队列分配队列空间,初始化线程锁及读写队列的条件。
由上述描述可知,采用任务ID对不同的任务线程和其对应的任务队列进行区分和标记,便于读写任务,以任务ID的阈值对线程数量进行控制,防止系统资源过载,为每一任务队列配备线程锁,保护读写操作互不干扰。
进一步的,所述步骤S2还包括:
创建任务指针数组,将每个任务队列对应的任务队列指针存入所述任务指针数组。
由上述描述可知,创建任务指针数组存储每个任务队列对应的任务队列指针,方便在不同场景下调用任务队列,能够快速完成响应且不易出错。
进一步的,所述步骤S3包括:
S311、接收任务写入请求,根据所述任务写入请求中获取对应的任务ID;
S312、判断所述任务ID是否在预设范围内,若是,执行S313,否则发送写入失败提示;
S313、根据所述任务ID,确定其对应的任务队列指针;
S314、通过所述任务队列指针,确定任务队列并对其线程锁上锁,判断所述任务队列中是否还有剩余空间,若是,则执行S316,否则,执行S315;
S315、解除所述任务队列的线程锁,并进入等待状态,当接收到任务可写入信号时执行所述S316;
S316、写入所述任务写入请求中的任务,发送任务可读取信号并解除所述任务队列的线程锁。
由上述描述可知,在任务写入过程中,以任务ID为标识,查找对应的任务队列指针,进而确定对应的任务队列,保证将任务准确写入对应的任务队列中,在执行写入操作时设置线程锁,保护写入操作不被外部因素影响,保证写入内容的正确和完整;写入操作不能及时进行时,挂起等待写入信号,保证了写入的效率。
进一步的,所述步骤S3包括:
S321、接收任务读取请求,根据所述任务写入请求中获取对应的任务ID;
S322、判断所述任务ID是否在预设范围内,若是,则执行步骤S323,否则,发送读取失败提示;
S323、根据所述任务ID,确定对应的任务队列指针;
S324、通过所述任务队列指针,确定对应的任务队列并对其线程锁上锁,判断所述任务队列中是否有写入的任务,若是,则执行步骤S326,否则,执行步骤S325;
S325、解除所述任务队列的线程锁,并进入等待状态,当接收到任务可读取信号时执行所述步骤S326;
S326、读取所述任务读取请求中的任务,并释放所读取的任务的空间,发送任务可写入信号并解除所述任务队列的线程锁。
由上述描述可知,任务线程以任务ID为标识读取对应的任务队列中被写入的任务,任务线程与任务队列一一对应,线程获取资源时不需要互相等待,加快了任务的处理过程,在读取任务的过程中,为任务队列加上线程锁,保证了读取过程的稳定。
请参照图1、图3及图4,本发明的实施例一为:
一种多线程多任务管理方法,具体包括:
S1、请参照图4,根据任务个数创建对应个数的任务线程,初始状态为阻塞,并为每个任务线程创建对应的任务队列;
具体的,根据无人驾驶车辆启动时产生的任务个数,创建对应个数的任务线程,之后不再创建新任务线程;
请参照图5,其中,为每个任务线程创建对应的任务队列具体为:
S11、给每个任务线程分配对应的任务ID,所述任务ID为大于0的整数且不同的任务线程对应的任务ID互不相同;
S12、获取要创建任务队列的任务线程对应的任务ID,判断所述任务ID是否处于预设范围内,若是,则执行步骤S13,若否,则结束此次过程;
S13、根据所述任务ID,创建对应的任务队列,并为所述任务队列分配队列空间,初始化线程锁及读写队列的条件;
例如给转向任务的线程分配任务ID1234,则其对应的任务队列ID也为1234,若产生转向任务,则自动分配任务ID1234;
S2、为每个任务队列建立对应的任务队列指针以存放所述任务队列;
创建任务队列具体为:
还包括:
创建任务指针数组,将每个任务队列对应的任务队列指针存入所述任务指针数组;
优选的,S1中创建任务线程前,根据任务个数给任务指针数组分配空间,并初始化任务下发和接收的句柄,以供使用;
具体的,创建msg_quehndl*hndl_list[MAX_QUE]任务指针数组,其中,MAX_QUE为最大存放数,即任务ID的阈值。
S3、接收任务处理请求,根据所述任务处理请求中的任务标识确定对应的任务队列指针以获取对应的任务队列,根据所获取的对应的任务队列的状态对所述任务处理请求进行响应;
优选的,为每个任务设置优先级属性,TASK_LEVEL1~5,TASK_LEVEL1的优先级最高,TASK_LEVEL5的优先级最低,默认任务的优先级属性为TASK_LEVEL4,紧急制动任务的优先级最高,为TASK_LEVEL1,熄火任务为TASK_LEVEL2,点火任务为TASK_LEVEL3,转向、油门等任务为TASK_LEVEL4;
任务在任务队列中默认按照任务生成时间从前到后存储,在任务指针数组中,按照任务优先等级存储相应任务队列,优先等级高的任务存储在前,若接收的任务处理请求为TASK_LEVEL1任务,则清空其他所有任务队列。
请参照图5及图6,本发明的实施例二为:
一种多线程多任务管理方法,其与实施例一的不同之处在于,所述任务处理请求包括任务写入请求和任务读取请求,若是任务写入请求,则如图5所示,所述步骤S3包括:
S311、接收任务写入请求,根据所述任务写入请求中获取对应的任务ID;
S312、判断所述任务ID是否在预设范围内,若是,执行S313,否则发送写入失败提示;
S313、根据所述任务ID,确定其对应的任务队列指针;
具体的,以所述任务ID为标识,从任务指针数组中取出对应ID的任务队列指针;
S314、通过所述任务队列指针,确定任务队列并对其线程锁上锁,判断所述任务队列中是否还有剩余空间,若是,则执行S316,否则,执行S315;
S315、解除所述任务队列的线程锁,并进入等待状态,当接收到任务可写入信号时执行所述S316;
S316、写入所述任务写入请求中的任务,发送任务可读取信号并解除所述任务队列的线程锁;
优选的,采用Int task_queput(int task_id,unsigned int cmd,int level,intlen,void*data,unsigned int timeout)接口执行所述任务写入请求,其中,task_id用于标识任务ID,cmd用于标识任务名称,level用于标识任务等级,len是任务数据长度,data是任务数据,timeout标识等待时间。在该接口中会根据task_id找到相应的任务队列,再根据level确定任务在任务队列中存放相应的位置,主线程在接收到任务消息后,对任务消息解析,然后再根据消息的属性,通过该接口往任务对列中写入任务;
若为任务读取请求,则如图6所示,所述步骤S3包括:
S321、接收任务读取请求,根据所述任务写入请求中获取对应的任务ID;
S322、判断所述任务ID是否在预设范围内,若是,则执行步骤S323,否则,发送读取失败提示;
S323、根据所述任务ID,确定对应的任务队列指针;
具体的,以所述任务ID为标识,从任务指针数组中取出对应ID的任务队列指针;
S324、通过所述任务队列指针,确定对应的任务队列并对其线程锁上锁,判断所述任务队列中是否有写入的任务,若是,则执行步骤S326,否则,执行步骤S325;
S325、解除所述任务队列的线程锁,并进入等待状态,当接收到任务可读取信号时执行所述步骤S326;
S326、读取所述任务读取请求中的任务,并释放所读取的任务的空间,发送任务可写入信号并解除所述任务队列的线程锁;
优选的,采用接口int task_queget(int que_id,unsigned int*pcmd,int*plen,void*data,unsigned int timeout)执行任务读取请求,任务线程通过该接口读取任务队列中的任务并执行,具体的,根据que_id确定任务队列,读取其中存储的任务,然后执行所述任务队列中存储的任务,当任务队列为空时,任务线程可根据接口中timeout的值等待相应的时间,或者阻塞挂起等待任务,直至被条件变量唤醒。
请参照图2,本发明的实施例三为:
一种多线程多任务管理终端1,所述终端1包括处理器2、存储器3及存储在存储器3上并可在所述处理器2上运行的计算机程序,所述处理器2执行所述计算机程序时实现实施例一或实施例二中的各个步骤。
综上所述,本发明提供了一种多线程多任务管理方法及终端,在无人驾驶系统中,根据车辆启动时任务的个数创建对应个数的任务线程,保证能够最快速度响应任务,并且给每个任务线程都创建对应的任务队列,避免了不同线程读取同一队列资源需要互相等待造成任务响应时间延长的问题,任务响应的高效率保证了无人驾驶系统的安全性;任务线程的初始状态为阻塞,能够快速对任务进行响应;采用任务ID对任务线程及其对应的任务队列进行标识,使每个任务线程只能与其对应的任务队列连接,避免了资源使用的混乱,同时方便了任务的写入和读取操作,进一步提升了任务处理的速度;创建任务指针数组,将所有任务队列对应的任务队列指针统一存储,加快了定位任务队列的过程;对任务进行分级,优先处理高优先级的任务,确保了无人驾驶的安全性,并且在接收到TASK_LEVEL1优先级别的任务时,将任务队列中的其他任务删除,确保紧急制动之后车辆不再进行其他操作,保证车内人员的安全;在保证数据时效性和提高任务处理效率的同时保证了安全性。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种多线程多任务管理方法,其特征在于,包括步骤:
S1、根据任务个数创建对应个数的任务线程,初始状态为阻塞,并为每个任务线程创建对应的任务队列;
S2、为每个任务队列建立对应的任务队列指针以存放所述任务队列;
S3、接收任务处理请求,根据所述任务处理请求中的任务标识确定对应的任务队列指针以获取对应的任务队列,根据所获取的对应的任务队列的状态对所述任务处理请求进行响应。
2.根据权利要求1所述的一种多线程多任务管理方法,其特征在于,所述S1中为每个任务线程创建对应的任务队列具体为:
S11、给每个任务线程分配对应的任务ID,所述任务ID为大于0的整数且不同的任务线程对应的任务ID互不相同;
S12、获取要创建任务队列的任务线程对应的任务ID,判断所述任务ID是否处于预设范围内,若是,则执行步骤S13,若否,则结束此次过程;
S13、根据所述任务ID,创建对应的任务队列,并为所述任务队列分配队列空间,初始化线程锁及读写队列的条件。
3.根据权利要求1所述的一种多线程多任务管理方法,其特征在于,所述步骤S2还包括:
创建任务指针数组,将每个任务队列对应的任务队列指针存入所述任务指针数组。
4.根据权利要求2所述的一种多线程多任务管理方法,其特征在在于,所述步骤S3包括:
S311、接收任务写入请求,根据所述任务写入请求中获取对应的任务ID;
S312、判断所述任务ID是否在预设范围内,若是,执行S313,否则发送写入失败提示;
S313、根据所述任务ID,确定其对应的任务队列指针;
S314、通过所述任务队列指针,确定任务队列并对其线程锁上锁,判断所述任务队列中是否还有剩余空间,若是,则执行S316,否则,执行S315;
S315、解除所述任务队列的线程锁,并进入等待状态,当接收到任务可写入信号时执行所述S316;
S316、写入所述任务写入请求中的任务,发送任务可读取信号并解除所述任务队列的线程锁。
5.根据权利要求2所述的一种多线程多任务管理方法,其特征在于,所述步骤S3包括:
S321、接收任务读取请求,根据所述任务写入请求中获取对应的任务ID;
S322、判断所述任务ID是否在预设范围内,若是,则执行步骤S323,否则,发送读取失败提示;
S323、根据所述任务ID,确定对应的任务队列指针;
S324、通过所述任务队列指针,确定对应的任务队列并对其线程锁上锁,判断所述任务队列中是否有写入的任务,若是,则执行步骤S326,否则,执行步骤S325;
S325、解除所述任务队列的线程锁,并进入等待状态,当接收到任务可读取信号时执行所述步骤S326;
S326、读取所述任务读取请求中的任务,并释放所读取的任务的空间,发送任务可写入信号并解除所述任务队列的线程锁。
6.一种多线程多任务管理终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
S1、根据任务个数创建对应个数的任务线程,初始状态为阻塞,并为每个任务线程创建对应的任务队列;
S2、为每个任务队列建立对应的任务队列指针以存放所述任务队列;
S3、接收任务处理请求,根据所述任务处理请求中的任务标识确定对应的任务队列指针以获取对应的任务队列,根据所获取的对应的任务队列的状态对所述任务处理请求进行响应。
7.根据权利要求6所述的一种多线程多任务管理终端,其特征在于,所述S1中为每个任务线程创建对应的任务队列具体为:
S11、给每个任务线程分配对应的任务ID,所述任务ID为大于0的整数且不同的任务线程对应的任务ID互不相同;
S12、获取要创建任务队列的任务线程对应的任务ID,判断所述任务ID是否处于预设范围内,若是,则执行步骤S13,若否,则结束此次过程;
S13、根据所述任务ID,创建对应的任务队列,并为所述任务队列分配队列空间,初始化线程锁及读写队列的条件。
8.根据权利要求6所述的一种多线程多任务管理终端,其特征在于,所述步骤S2还包括:
创建任务指针数组,将每个任务队列对应的任务队列指针存入所述任务指针数组。
9.根据权利要求7所述的一种多线程多任务管理终端,其特征在在于,所述步骤S3包括:
S311、接收任务写入请求,根据所述任务写入请求中获取对应的任务ID;
S312、判断所述任务ID是否在预设范围内,若是,执行S313,否则发送写入失败提示;
S313、根据所述任务ID,确定其对应的任务队列指针;
S314、通过所述任务队列指针,确定任务队列并对其线程锁上锁,判断所述任务队列中是否还有剩余空间,若是,则执行S316,否则,执行S315;
S315、解除所述任务队列的线程锁,并进入等待状态,当接收到任务可写入信号时执行所述S316;
S316、写入所述任务写入请求中的任务,发送任务可读取信号并解除所述任务队列的线程锁。
10.根据权利要求7所述的一种多线程多任务管理终端,其特征在于,所述步骤S3包括:
S321、接收任务读取请求,根据所述任务写入请求中获取对应的任务ID;
S322、判断所述任务ID是否在预设范围内,若是,则执行步骤S323,否则,发送读取失败提示;
S323、根据所述任务ID,确定对应的任务队列指针;
S324、通过所述任务队列指针,确定对应的任务队列并对其线程锁上锁,判断所述任务队列中是否有写入的任务,若是,则执行步骤S326,否则,执行步骤S325;
S325、解除所述任务队列的线程锁,并进入等待状态,当接收到任务可读取信号时执行所述步骤S326;
S326、读取所述任务读取请求中的任务,并释放所读取的任务的空间,发送任务可写入信号并解除所述任务队列的线程锁。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010273037.7A CN111475300B (zh) | 2020-04-09 | 2020-04-09 | 一种多线程多任务管理方法及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010273037.7A CN111475300B (zh) | 2020-04-09 | 2020-04-09 | 一种多线程多任务管理方法及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111475300A true CN111475300A (zh) | 2020-07-31 |
CN111475300B CN111475300B (zh) | 2023-06-23 |
Family
ID=71751351
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010273037.7A Active CN111475300B (zh) | 2020-04-09 | 2020-04-09 | 一种多线程多任务管理方法及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111475300B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113176896A (zh) * | 2021-03-19 | 2021-07-27 | 中盈优创资讯科技有限公司 | 一种基于单进单出无锁队列的随机取出对象的方法 |
CN114253714A (zh) * | 2021-12-07 | 2022-03-29 | 四川新网银行股份有限公司 | 一种基于阻塞队列的多线程数据处理的方法、系统及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893126A (zh) * | 2016-03-29 | 2016-08-24 | 华为技术有限公司 | 一种任务调度方法及装置 |
CN107301087A (zh) * | 2017-06-28 | 2017-10-27 | 郑州云海信息技术有限公司 | 一种多线程系统的性能提升方法和装置 |
CN108121792A (zh) * | 2017-12-20 | 2018-06-05 | 第四范式(北京)技术有限公司 | 基于任务并行处理数据流的方法、装置、设备及存储介质 |
-
2020
- 2020-04-09 CN CN202010273037.7A patent/CN111475300B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893126A (zh) * | 2016-03-29 | 2016-08-24 | 华为技术有限公司 | 一种任务调度方法及装置 |
CN107301087A (zh) * | 2017-06-28 | 2017-10-27 | 郑州云海信息技术有限公司 | 一种多线程系统的性能提升方法和装置 |
CN108121792A (zh) * | 2017-12-20 | 2018-06-05 | 第四范式(北京)技术有限公司 | 基于任务并行处理数据流的方法、装置、设备及存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113176896A (zh) * | 2021-03-19 | 2021-07-27 | 中盈优创资讯科技有限公司 | 一种基于单进单出无锁队列的随机取出对象的方法 |
CN114253714A (zh) * | 2021-12-07 | 2022-03-29 | 四川新网银行股份有限公司 | 一种基于阻塞队列的多线程数据处理的方法、系统及设备 |
CN114253714B (zh) * | 2021-12-07 | 2024-04-12 | 四川新网银行股份有限公司 | 一种基于阻塞队列的多线程数据处理的方法、系统及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111475300B (zh) | 2023-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8145817B2 (en) | Reader/writer lock with reduced cache contention | |
US7392525B2 (en) | Inter-thread long jumps in a multithreaded environment | |
KR100463235B1 (ko) | 자원관리를위한컴퓨터구현방법,컴퓨터판독가능매체및컴퓨터시스템 | |
US6904483B2 (en) | System and method for priority inheritance | |
US9798595B2 (en) | Transparent user mode scheduling on traditional threading systems | |
US6560627B1 (en) | Mutual exclusion at the record level with priority inheritance for embedded systems using one semaphore | |
US11132294B2 (en) | Real-time replicating garbage collection | |
US8412894B2 (en) | Value recycling facility for multithreaded computations | |
US6253225B1 (en) | Process executing method and resource accessing method in computer system | |
US20020133530A1 (en) | Method for resource control including resource stealing | |
CN111767159A (zh) | 一种基于协程的异步系统调用系统 | |
US8141076B2 (en) | Cell processor methods and apparatus | |
US8769546B2 (en) | Busy-wait time for threads | |
US20200409841A1 (en) | Multi-threaded pause-less replicating garbage collection | |
US8578105B2 (en) | Using type stability to facilitate contention management | |
US5138713A (en) | Multiprocessing computer system with exit logic and method for maintaining resource integrity | |
CN111475300A (zh) | 一种多线程多任务管理方法及终端 | |
US6662364B1 (en) | System and method for reducing synchronization overhead in multithreaded code | |
US6976260B1 (en) | Method and apparatus for serializing a message queue in a multiprocessing environment | |
US8682914B2 (en) | Method and system for robust futexes | |
CN111831436A (zh) | Io请求的调度方法、装置、存储介质及电子设备 | |
WO2022194162A1 (zh) | 用于处理中断请求的方法和装置 | |
CN116756380A (zh) | 环形单链表的处理方法和装置 | |
CN117453413A (zh) | 资源申请方法、装置、电子设备以及存储介质 | |
CN114691376A (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 |