CN106933681B - 一种多对象阻塞方法及其系统 - Google Patents
一种多对象阻塞方法及其系统 Download PDFInfo
- Publication number
- CN106933681B CN106933681B CN201710065066.2A CN201710065066A CN106933681B CN 106933681 B CN106933681 B CN 106933681B CN 201710065066 A CN201710065066 A CN 201710065066A CN 106933681 B CN106933681 B CN 106933681B
- Authority
- CN
- China
- Prior art keywords
- queue
- thread
- gateway
- record value
- task
- 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
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/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- 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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Debugging And Monitoring (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明适用于计算机软件应用领域,提供了一种多对象阻塞方法及其系统。所述方法包括:系统发送待处理任务到队列,调用所述队列上预先注册的通知函数,所述通知函数发送消息到预先设置的网关,唤醒线程,所述线程判断所述队列上的记录值,根据判断结果执行待处理任务。通过上述方法通过在线程上设置的网关,可以使线程能够同时等待多个队列,在多个队列上均有待处理任务时做到及时处理。本实施例中通过在线程上设置一网关来实现线程对多目标对象的阻塞,实现方法简单,大大降低了软件设计的难度。
Description
技术领域
本发明实施例属于计算机软件应用领域,尤其涉及一种多对象阻塞方法及其系统。
背景技术
线程阻塞通常是指一个线程在执行过程中暂停,以等待某个条件的触发。当线程处于阻塞状态时,调度器将忽略线程,不会分配给线程任何CPU时间,直到线程重新进入就绪状态,它才有可能执行操作。现有的软件系统中,存在多个队列的线程,虽然任意队列接收到任务处理消息时都可将线程唤醒,但线程仅能等待其中一个队列上待处理任务的出现,也就是说,其中一个队列上接收到待处理任务而将线程唤醒时,线程便不再等待其他队列。而对于某个线程来说,它往往需要同时阻塞于信号量及消息队列或者多个消息队列,当线程收到同步信号或者消息时需要马上对信号或者消息进行处理,但现有技术中当前阻塞线程被唤醒后,会优先执行最先唤醒线程的任务队列或信号量,从而导致线程无法同时接收到多个消息队列任务,并对其进行处理。
故,需要一种能够实现单线程阻塞于多个目标对象的方法。
发明内容
本发明实施例提供了一种多对象阻塞方法,旨在解决现有的方法中,单线程中多队列同时接收任务处理消息时,线程无法及时处理待处理任务的问题。
本发明实施例的第一方面,提供一种多对象阻塞方法,所述方法包括:
系统发送待处理任务到队列,调用所述队列上预先注册的通知函数;
所述通知函数发送消息到预先设置的网关,唤醒线程;
所述线程判断所述队列上的记录值,根据判断结果执行待处理任务。
本发明实施例的第二方面,提供一种多对象阻塞系统,所述系统包括:
函数调用单元,用于发送待处理任务到队列,调用所述队列上预先注册的通知函数;
通知函数,用于发送消息到预先设置的网关,唤醒线程;
线程,用于判断所述队列上的记录值,根据判断结果执行待处理任务。
在本发明实施例中,当系统调用一个队列进行任务处理时,自动调用队列上预先注册的通知函数,通知函数发送消息到预先设置的网关,网关接收到上述通知函数发送的消息后便唤醒线程,由线程对队列进行判断后,接收并运行队列上的待处理任务。通过在线程上设置的网关,可以使线程能够同时等待多个队列,在多个队列上均有待处理任务时做到及时处理。本实施例中通过在线程上设置一网关来实现线程对多目标对象的阻塞,实现方法简单,大大降低了软件设计的难度。
附图说明
图1是本发明第一实施例提供的一种多对象阻塞方法的流程图;
图2是本发明第二实施例提供的一种多对象阻塞系统的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例中,系统调用队列处理任务时,调用队列上预先设置的通知函数,所述通知函数被调用后,发送消息到预先设置的网关,网关接收通知函数发送的消息后启动线程,线程对队列进行判断,接收并运行待处理任务。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
实施例一:
图1示出了本发明第一实施例提供的一种多对象阻塞方法的流程图,详述如下:
步骤S110,系统发送待处理任务到队列,调用所述队列上预先注册的通知函数;
操作系统中处于阻塞状态的线程往往只能等待一项待处理任务,当一个队列上接收到待处理任务时,线程便被唤醒去处理所述队列上待处理任务,而不能继续等待其他队列;但单个线程往往需要同时阻塞于信号量及任务队列或者多个任务队列等,当线程收到同步信号或者待处理任务时需要马上对信号或者待处理任务进行处理。
因此,在该步骤中,系统调用队列进行任务处理时,首先调用队列上预先设置的一个具有函数通知功能的通知函数。例如,通过函数:yh_semphore_send_notify(&sem1,notify_function),注册一个通知函数notify_function到信号量sem1上,当用户使用函数yh_semaphore_put的时候就可以触发此通知函数。同样对于队列也有此功能,通过函数:yh_queue_send_notify(&queue1,notify_function),可预先注册一个通知函数notify_function到队列上,当用户使用函数yh_queue_post时会触发此通知函数,其它的接口设计都跟以上类同。
进一步地,在所述系统发送待处理任务到队列,调用所述队列上预先注册的通知函数之后,还包括:所述队列将自身的记录值加1,并返回记录值,所述记录值与队列的任务数量对应。在系统调用队列处理任务,并调用队列上的注册函数后,队列存储所接受的待处理任务,并在任务数量记录模块更改队列所持有的任务数量;队列每接收一个待处理任务,任务数量记录模块的记录值便增加1,记录值更改后存储在任务数量记录模块,并返回此记录值给系统。当队列上不存在待处理任务时,所述记录值显示为0。队列上待处理任务被运行后,所述记录值减小1,并存储。
步骤S120,所述通知函数发送消息到预先设置的网关,唤醒线程。
该步骤中,系统调用队列上通知函数notify_function后,所述通知函数向预先设置的网关发送消息。所述消息为一信号量。当队列上不含待处理任务时,所述线程阻塞于所述网关处。所述网关接收所述通知函数发送的消息后唤醒线程。
进一步地,在所述通知函数发送消息到预先设置的网关之后包括:所述网关内部计数器的值更改为1。
队列上通知函数notify_function由于被触发而发送的消息被网关接收后,网关内部设置的计数器值更改为1,所述计数器的值表征是否需要线程接收待执行任务;当所述计数器值变为1时,说明队列上有需要处理的任务,因此,唤醒线程接收队列上待处理任务。
步骤S130,所述线程判断所述队列上的记录值,根据判断结果执行待处理任务。
该步骤中,线程被唤醒后,调用队列任务数量记录模块的记录值,对其进行判断,具体包括,线程判断某一个队列上任务数据记录模块的记录值,若所述记录值不为0,说明该队列上有待处理任务,线程接收待处理任务并运行;若所述记录值为0,说明该队列为空,则线程执行立刻返回功能,继续调用下一个队列上的记录值,对其进行判断。
进一步地,判断所述线程是否已运行所述队列上的待处理任务,在所述线程已运行所述队列上的待处理任务后,所述网关内部计数器值自动调整为0。
在线程判断队列上有待处理任务,接收并运行所述待处理任务后,所述网关判断线程成功接收队列上待处理任务后,将自身内部计数器的数值自动调整为0。当所述网关内部计数器数值为0时,说明该线程处于阻塞状态。因此,即使某一队列上的任务正在被执行,也不会影响线程通过网关继续等待其他队列。当其他任一队列上接收到待处理任务时,即可通过通知函数发送消息给网关,由网关再次唤醒线程,进而使线程继续接收另一队列上待执行任务,队列之间互不影响。实现了单线程对多目标对象的阻塞。
本发明第一实施例中,当系统调用一个队列进行任务处理时,自动调用队列上预先注册的通知函数;通知函数发送一信号量到预先设置的网关;网关接收到上述通知函数发送的信号量后便唤醒线程,由线程对队列进行判断后,接收并运行队列上的待处理任务。通过在线程上设置一网关,可以使线程能够同时等待多个队列,在多个队列上均有待处理任务时做到及时处理。本实施例中通过在线程上设置一网关来实现线程对多目标对象的阻塞,实现方法简单,大大降低了软件设计的难度。
应理解,在本发明实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
实施例二:
图2示出了本发明第二实施例提供的一种多对象阻塞系统的结构图,该系统可应用于各种终端中。为了便于说明,仅示出了与本发明实施例相关的部分。详述如下:
该多对象阻塞系统包括:函数调用单元210,通知函数220,线程230。其中:
函数调用单元210,用于发送待处理任务到队列,调用所述队列上预先注册的通知函数;
调用队列进行任务处理时,首先调用队列上预先设置的一个具有函数通知功能的通知函数。例如,通过函数:yh_semphore_send_notify(&sem1,notify_function),注册一个通知函数notify_function到信号量sem1上,当用户使用函数yh_semaphore_put的时候就可以触发此通知函数。同样对于队列也有此功能,通过函数:yh_queue_send_notify(&queue1,notify_function),可预先注册一个通知函数notify_function到队列上,当用户使用函数yh_queue_post时会触发此通知函数,其它的接口设计都跟以上类同。
进一步地,所述系统还包括:队列,用于在发送待处理任务到队列,调用所述队列上预先注册的通知函数之后,将自身的记录值加1,并返回记录值,所述记录值与队列的任务数量对应。
在系统调用队列处理任务,并调用队列上的注册函数后,队列存储所接受的待处理任务,并在任务数量记录模块更改队列所持有的任务数量;队列每接收一个待处理任务,任务数量记录模块的记录值便增加1,记录值更改后存储在任务数量记录模块,并返回此记录值给系统。当队列上不存在待处理任务时,所述记录值显示为0。队列上待处理任务被运行后,所述记录值减小1,并存储。
通知函数220,用于发送消息到预先设置的网关,唤醒线程;
调用队列上通知函数notify_function后,所述通知函数向预先设置的网关发送消息。所述消息为一信号量。当队列上不含待处理任务时,所述线程阻塞于所述网关处。所述网关接收所述通知函数发送的消息后唤醒线程。
进一步地,所述网关用于,在所述通知函数发送消息到预先设置的网关之后,将内部计数器的值更改为1。
队列上通知函数notify_function由于被触发而发送的消息被网关接收后,网关内部设置的计数器值更改为1,所述计数器的值表征是否需要线程接收待执行任务;当所述计数器值变为1时,说明队列上有需要处理的任务,因此,唤醒线程接收队列上待处理任务。
线程230,用于判断所述队列上的记录值,根据判断结果执行待处理任务。。
所述任务执行单元230,具体用于:调用所述队列上的记录值,若所述记录值不为0,则运行待处理任务;若所述记录值为0,则立即返回,对下一个队列上的记录值进行判断。
进一步地,所述网关还用于,判断所述线程是否已运行所述队列上的待处理任务,在所述线程已运行所述队列上的待处理任务后,所述网关内部计数器值自动调整为0。
在线程判断队列上有待处理任务,接收并运行所述待处理任务后,所述网关判断线程成功接收队列上待处理任务后,将自身内部计数器的数值自动调整为0。当所述网关内部计数器数值为0时,说明该线程处于阻塞状态。因此,即使某一队列上的任务正在被执行,也不会影响线程通过网关继续等待其他队列。当其他任一队列上接收到待处理任务时,即可通过通知函数发送消息给网关,由网关再次唤醒线程,进而使线程继续接收另一队列上待执行任务,队列之间互不影响。实现了单线程对多目标对象的阻塞。
本发明第二实施例中,函数调用单元在队列上接收到待处理任务时,调用队列上预先注册的通知函数;线程唤醒单元中网关接收通知函数发送的消息后便唤醒线程;任务执行单元在由线程对队列进行判断后,接收并运行队列上的待处理任务。通过在线程上设置的网关,可以使线程能够同时等待多个队列,在多个队列上均有待处理任务时做到及时处理。本实施例中通过在线程上设置一网关来实现线程对多目标对象的阻塞,实现方法简单,大大降低了软件设计的难度。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (8)
1.一种多对象阻塞方法,其特征在于,所述方法包括:
系统发送待处理任务到队列,调用所述队列上预先注册的通知函数;
所述通知函数发送消息到预先设置的网关,唤醒线程,所述网关为信号量;
所述线程调用所述队列上的记录值,若所述记录值不为0,则运行待处理任务;若所述记录值为0,则立即返回,对下一个队列上的记录值进行判断。
2.根据权利要求1所述的方法,其特征在于,在所述系统发送待处理任务到队列,调用所述队列上预先注册的通知函数之后,还包括:所述队列将自身的记录值加1,并返回记录值,所述记录值与队列的任务数量对应。
3.根据权利要求1所述的方法,其特征在于,在所述通知函数发送消息到预先设置的网关之后包括:所述网关内部计数器的值更改为1。
4.根据权利要求3所述的方法,其特征在于,在所述线程调用所述队列上的记录值,若所述记录值不为0,则运行待处理任务;若所述记录值为0,则立即返回,对下一个队列上的记录值进行判断之后还包括:判断所述线程是否已运行所述队列上的待处理任务,在所述线程已运行所述队列上的待处理任务后,所述网关内部计数器值自动调整为0。
5.一种多对象阻塞系统,其特征在于,所述系统包括:
函数调用单元,用于发送待处理任务到队列,调用所述队列上预先注册的通知函数;
通知函数,用于发送消息到预先设置的网关,唤醒线程,所述网关为信号量;
线程,用于调用所述队列上的记录值,若所述记录值不为0,则运行待处理任务;若所述记录值为0,则立即返回,对下一个队列上的记录值进行判断。
6.根据权利要求5所述的系统,其特征在于,所述系统还包括:
队列,用于在发送待处理任务到队列,调用所述队列上预先注册的通知函数之后,将自身的记录值加1,并返回记录值,所述记录值与队列的任务数量对应。
7.根据权利要求5所述的系统,其特征在于,所述网关用于,在所述通知函数发送消息到预先设置的网关之后,将内部计数器的值更改为1。
8.根据权利要求7所述的系统,其特征在于,所述网关还用于,判断所述线程是否已运行所述队列上的待处理任务,在所述线程已运行所述队列上的待处理任务后,所述网关内部计数器值自动调整为0。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710065066.2A CN106933681B (zh) | 2017-02-05 | 2017-02-05 | 一种多对象阻塞方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710065066.2A CN106933681B (zh) | 2017-02-05 | 2017-02-05 | 一种多对象阻塞方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106933681A CN106933681A (zh) | 2017-07-07 |
CN106933681B true CN106933681B (zh) | 2019-10-11 |
Family
ID=59422954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710065066.2A Active CN106933681B (zh) | 2017-02-05 | 2017-02-05 | 一种多对象阻塞方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106933681B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110309024B (zh) * | 2019-04-23 | 2023-07-18 | 网宿科技股份有限公司 | 数据处理系统及其执行数据处理任务的方法 |
CN112685100A (zh) * | 2020-12-31 | 2021-04-20 | 深圳市大富网络技术有限公司 | 一种线程启动方法、系统及装置 |
CN113426104A (zh) * | 2021-06-24 | 2021-09-24 | 网易(杭州)网络有限公司 | 一种信息处理方法、装置、计算机设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751293A (zh) * | 2008-12-16 | 2010-06-23 | 智邦科技股份有限公司 | 程序的线程群组管理方法 |
CN102841810A (zh) * | 2011-05-14 | 2012-12-26 | 国际商业机器公司 | 用于在计算环境中执行线程的方法和系统 |
CN104156261A (zh) * | 2014-08-11 | 2014-11-19 | 浪潮(北京)电子信息产业有限公司 | 多控制器之间任务处理的方法和装置 |
-
2017
- 2017-02-05 CN CN201710065066.2A patent/CN106933681B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751293A (zh) * | 2008-12-16 | 2010-06-23 | 智邦科技股份有限公司 | 程序的线程群组管理方法 |
CN102841810A (zh) * | 2011-05-14 | 2012-12-26 | 国际商业机器公司 | 用于在计算环境中执行线程的方法和系统 |
CN104156261A (zh) * | 2014-08-11 | 2014-11-19 | 浪潮(北京)电子信息产业有限公司 | 多控制器之间任务处理的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106933681A (zh) | 2017-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109918141B (zh) | 线程执行方法、装置、终端及存储介质 | |
CN106933681B (zh) | 一种多对象阻塞方法及其系统 | |
CN107800546B (zh) | 一种广播消息的管理方法及装置 | |
CN101452420B (zh) | 一种嵌入式软件异常监控和处理装置及其方法 | |
US8875141B2 (en) | Execute or cancel a scheduled task execution that missed execution condition on a device based on rule and execution condition received from a management server | |
JP4729611B2 (ja) | イベントキュー管理装置及びイベントキュー管理方法 | |
US20100229025A1 (en) | Fault Recovery in Concurrent Queue Management Systems | |
CN108536531B (zh) | 一种基于单片机的任务调度和电源管理方法 | |
CN105335146B (zh) | 管理软件数据流量的方法及便携式电子装置 | |
US6820263B1 (en) | Methods and system for time management in a shared memory parallel processor computing environment | |
CN104346563B (zh) | 一种信息处理的方法及电子设备 | |
US20080155546A1 (en) | Method of controlling thread access to a synchronization object | |
US6907606B1 (en) | Method for implementing event transfer system of real time operating system | |
CN101114984A (zh) | 一种多线程网络负载控制方法 | |
CN114138506B (zh) | 消息队列调度方法及其装置、设备、介质、产品 | |
CN107491350A (zh) | 接口任务调用方法及装置 | |
US20090049445A1 (en) | Method, system and apparatus for task processing in device management | |
CN112596761B (zh) | 服务的更新发布方法、装置及相关设备 | |
CN112214309B (zh) | 实现车载物联网嵌入式操作系统内核的方法及介质 | |
CN101349975A (zh) | 实现中断底半部机制的方法及嵌入式系统 | |
US10949367B2 (en) | Method for handling kernel service request for interrupt routines in multi-core environment and electronic device thereof | |
CN105975043A (zh) | 终端控制方法及控制装置、终端 | |
CN113703939B (zh) | 任务调度方法、系统及电子设备 | |
CN110519098A (zh) | 一种异常单板的处理方法及装置 | |
CN107239417B (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 |