CN112732453A - 跨线程消息处理方法、装置、系统和计算机可读存储介质 - Google Patents
跨线程消息处理方法、装置、系统和计算机可读存储介质 Download PDFInfo
- Publication number
- CN112732453A CN112732453A CN201910973960.9A CN201910973960A CN112732453A CN 112732453 A CN112732453 A CN 112732453A CN 201910973960 A CN201910973960 A CN 201910973960A CN 112732453 A CN112732453 A CN 112732453A
- Authority
- CN
- China
- Prior art keywords
- message
- context
- interception
- source object
- name
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 22
- 238000003860 storage Methods 0.000 title claims abstract description 13
- 238000012545 processing Methods 0.000 claims abstract description 77
- 230000006870 function Effects 0.000 claims abstract description 68
- 230000015654 memory Effects 0.000 claims description 16
- 230000006378 damage Effects 0.000 claims description 9
- 238000000034 method Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 3
- 238000011161 development Methods 0.000 abstract description 8
- 230000018109 developmental process Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000002860 competitive effect Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000008140 language development Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
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/524—Deadlock detection or avoidance
-
- 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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明实施例提供了一种跨线程消息处理方法、装置及系统和计算机可读存储介质。跨线程消息处理方法包括:接收消息并获取所述消息的消息结构,其中所述消息结构包括消息名;根据所述消息名获得与所述消息对应的消息侦听上下文列表;以及根据所述消息结构执行对应所述消息侦听上下文列表的消息处理函数。本发明实施例以简单高效的方式实现多线程间消息通知和处理,以在需要于不同线程间调用操作相同竞争资源的函数时并不直接调用函数,而是发送携带操作函数的消息,在消息侦听上下文列表中侦听这些消息并通知所述线程上下文,这样的开发模式就可以解决多线程非线程安全调用的加锁问题,实现免锁开发。
Description
技术领域
本发明涉及跨线程消息处理技术领域,尤其涉及一种跨线程消息处理方法、一种跨线程消息处理装置、一种跨线程消息处理系统和一种计算机可读存储介质。
背景技术
传统的C语言开发在跨线程消息通知时,会直接对多个线程进行访问,并且无可避免地调用某些非线程安全代码,此时则不得不考虑线程锁的使用,如果非线程安全接口过多或线程过于复杂时,容易形成死锁逻辑。
发明内容
本发明的实施例提供一种跨线程消息处理方法、一种跨线程消息处理装置、一种跨线程消息处理系统和一种计算机可读存储介质,以简单高效的方式实现多线程间消息通知和处理机制,可以在需要于不同线程间调用、操作相同竞争资源的函数时并不直接调用函数,而是发送携带操作参数例如用户数据的消息,在一个专门用于唯一操作该竞争资源的线程中侦听这些消息并实际操作竞争资源,以解决多线程非线程安全调用的加锁问题,实现免锁开发。
具体地,本发明实施例提供的一种跨线程消息处理方法,包括:接收消息并获取所述消息的消息结构,其中所述消息结构包括消息名;根据所述消息名获得与所述消息对应的消息侦听上下文列表;以及根据所述消息结构执行对应所述消息侦听上下文列表的消息处理函数。
相对于现有技术,本发明实施例是基于通过所述消息侦听上下文列表而并不直接访问所述线程上下文,让在多个业务线程间不直接访问竞争资源而是通过发送信号来让专门处理竞争资源的唯一线程访问竞争资源,简化竞争资源的访问问题,实现免锁开发。
在本发明的一个实施例中,还包括:建立指定消息名的侦听,具体为基于所述指定消息名从全局消息源对象列表中查找与所述指定消息名对应的消息源对象;若在所述全局消息源对象列表中查找到与所述指定消息名对应的所述消息源对象,则创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;若在所述全局消息源对象列表中没有查找到与所述指定消息名对应的所述消息源对象,则创建与所述指定消息名对应的消息源对象并将创建的所述消息源对象追加到所述全局消息源对象列表中,创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;所述根据所述消息名获得与所述消息对应的消息侦听上下文列表,包括:基于所述消息名从所述全局消息源对象列表中查找与所述消息名匹配的所述指定消息名并获得对应的所述消息侦听上下文列表。
在本发明的一个实施例中,所述消息结构还包括用户数据、引用计数和用户销毁函数,所述根据所述消息结构执行对应所述消息侦听上下文列表的消息处理函数,包括:根据所述消息名、所述用户数据和所述用户销毁函数建立新的消息结构,发送所述新的消息结构至与所述消息侦听上下文列表中的所述至少一个消息侦听上下文对应的所述线程上下文;以及执行与所述线程上下文对应的所述消息处理函数;以及对所述引用计数减引用。
在本发明的一个实施例中,所述跨线程消息处理方法还包括当所述引用计数为预定阈值时,通过所述用户销毁函数释放所述消息。
另一方面,本发明实施例提供的一种跨线程消息处理装置,包括:消息获取模块,用于接收消息并获取所述消息的消息结构,其中所述消息结构包括消息名;消息侦听模块,用于根据所述消息名获得与所述消息对应的消息侦听上下文列表;以及消息处理模块,用于根据所述消息结构执行对应所述消息侦听上下文列表的消息处理函数。
相对于现有技术,本发明实施例通过所述消息侦听模块使得多个业务线程间不直接访问竞争资源而是通过所述消息处理模块发送信号来让专门处理竞争资源的唯一线程访问竞争资源,简化竞争资源的访问问题,实现免锁开发。
在本发明的一个实施例中,所述跨线程消息处理装置还包括消息侦听建立模块,用于:将指定消息名从全局消息源对象列表中查找与所述指定消息名对应的消息源对象;若在所述全局消息源对象列表中查找到与所述指定消息名对应的所述消息源对象,则创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;若在所述全局消息源对象列表中没有查找到与所述指定消息名对应的所述消息源对象,则创建与所述消息名对应的消息源对象并将创建的所述消息源对象追加到所述全局消息源对象列表中,创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;所述消息侦听模块具体用于:基于所述消息名从所述全局消息源对象列表中查找与所述消息名匹配的所述指定消息名并获得对应的所述消息侦听上下文列表。
在本发明的一个实施例中,所述消息结构还包括用户数据、引用计数和用户销毁函数,所述消息处理模块具体用于:根据所述消息名、所述用户数据和所述用户销毁函数建立新的消息结构,发送所述新的消息结构至与所述消息侦听上下文列表中的所述至少一个消息侦听上下文对应的所述线程上下文;执行与所述线程上下文对应的所述消息处理函数;以及对所述引用计数减引用。
在本发明的一个实施例中,所述跨线程消息处理装置还包括消息释放模块,用于当所述引用计数为预定阈值时,通过所述用户销毁函数释放所述消息。
又一方面,本发明实施例提供的一种跨线程消息处理系统,包括:存储器和连接所述存储器的处理器,所述存储器存储计算机程序,所述处理器运行所述计算机程序时执行以上所述任意一种跨线程消息处理方法。
又一方面,本发明实施例提供的一种计算机可读存储介质,其为非易失性存储器且存储有计算机可执行指令,所述计算机可执行指令用于执行以上所述任意一种跨线程消息处理方法。
上述技术方案可以具有如下优点或有益效果:本发明实施例以简单高效的方式实现多线程间消息通知和处理,以在需要于不同线程间调用、操作相同竞争资源的函数时并不直接调用函数,而是发送携带消息名、用户数据、引用计数和用户数据销毁函数的消息,在所述消息侦听上下文列表中侦听这些消息并通知述线程上下文进行处理,以解决多线程非线程安全调用的加锁问题,实现免锁开发。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明第一实施例提供的跨线程消息处理方法的流程示意图。
图2为本发明第二实施例提供的跨线程消息处理装置的模块示意图。
图3为本发明第三实施例提供的跨线程消息处理系统的结构示意图。
图4为本发明第四实施例提供的计算机可读存储介质的结构示意图。
【附图标识说明】
S1-S3:跨线程消息处理方法步骤;
10:跨线程消息处理装置;11:消息获取模块;12:消息侦听模块;13:消息处理模块;
20:跨线程消息处理系统;21:处理器;22:存储器;
30:计算机可读存储介质;31:计算机可执行指令。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
【第一实施例】
请参见图1,图1为本发明实施例提供的跨线程消息处理方法的流程示意图。所述跨线程消息处理方法包括如下步骤:
步骤S1,接收消息并获取所述消息的消息结构,其中所述消息结构包括消息名;
步骤S2,根据所述消息名获得与所述消息对应的消息侦听上下文列表;具体地,基于所述消息名从全局消息源对象列表中查找与所述消息名对应的所述消息侦听上下文列表;以及
步骤S3,根据所述消息结构执行对应所述消息侦听上下文列表的消息处理函数,其中,所述消息结构还包括用户数据、引用计数和用户销毁函数,具体地,根据所述消息名、所述用户数据和所述用户销毁函数建立新的消息结构,发送所述新的消息结构至与所述消息侦听上下文列表中的所述至少一个消息侦听上下文对应的所述线程上下文;执行与所述线程上下文对应的所述消息处理函数;以及对所述引用计数减引用例如对所述引用计数的值减一代表已处理通知了一次。
在一个具体实施例中,所述跨线程消息处理方法还包括建立指定消息名的侦听,具体为基于所述指定消息名从全局消息源对象列表中查找与所述指定消息名对应的消息源对象;若在所述全局消息源对象列表中查找到与所述指定消息名对应的所述消息源对象,则创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;若在所述全局消息源对象列表中没有查找到与所述指定消息名对应的所述消息源对象,则创建与所述指定消息名对应的消息源对象并将创建的所述消息源对象追加到所述全局消息源对象列表中,创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;所述根据所述消息名获得与所述消息对应的消息侦听上下文列表,包括:基于所述消息名从所述全局消息源对象列表中查找与所述消息名匹配的所述指定消息名并获得对应的所述消息侦听上下文列表。
在一个具体实施例中,所述跨线程消息处理方法还包括当所述引用计数为预定阈值例如为零时,代表所述消息已完成处理通知,因此通过所述用户销毁函数释放所述消息。
为了更清楚地理解本实施例,下面简要描述本实施例的跨线程消息处理方法。首先定义线程上下文作为线程的抽象,在内部利用GAsyncQueue睡眠等待消息;定义消息侦听上下文作为线程与消息的侦听关系的抽象,内部记录对应的线程和消息处理函数;定义消息源对象作为消息源的抽象,内部记录对应的消息侦听上下文列表用以记录对应与所述消息源的所有侦听关系;创建全局消息源对象列表以消息名为键存储全局所有的消息源;定义消息结构作为程序执行中消息分发的载体,内部包含消息名、用户数据、引用计数、用户数据销毁函数,其中所述用户数据用于把消息侦听上下文列表中与线程上下文匹配的所有消息侦听上下文中的回调执行一遍,所述引用计数用于计数消息处理通知的次数,所述用户数据销毁函数配合引用计数用于自动释放用户数据内存。
接着,指定消息处理函数建立对指定消息的侦听,具体为基于指定消息名从全局消息源对象列表中查找与所述指定消息名对应的消息源对象;若在所述全局消息源对象列表中查找到与所述指定消息名对应的所述消息源对象,则创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;若在所述全局消息源对象列表中没有查找到与所述指定消息名对应的所述消息源对象,则创建与所述指定消息名对应的消息源对象并将创建的所述消息源对象追加到所述全局消息源对象列表中,创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中。
通过建立消息处理事件,具体为根据需要创建若干线程来独立处理消息,创建线程上下文作为当前线程的抽象,在这些线程中使用上述建立对指定消息的侦听,睡眠到所述线程上下文中的GAsyncQueue队列。当程序中其他地方发送了所述线程上下文所侦听的消息,则线程会从睡眠中被唤醒并获得GAsyncQueue返回的消息结构,通过消息名获得消息源对象的消息侦听上下文列表,使用消息中携带的用户数据把消息侦听列表中与所述线程上下文匹配的所有消息侦听上下文中的消息回调(或称消息处理函数)执行一遍,具体地,根据待发送消息名找到对应消息源对象的消息侦听上下文列表,使用消息名、用户数据及用户数据销毁函数建立新的消息结构,将新的消息结构发送往消息侦听上下文列表中每个侦听上下文中的线程上下文持有的GAsyncQueue队列,从而唤醒所有睡眠在这些GAsyncQueue队列的线程并执行这些线程针对该消息所关联的消息回调。最后对所述引用计数做减引用,具体为当执行了一个消息侦听上下文对应的线程上下文对应消息的消息处理函数,则对所述引用计数减引用,例如对所述引用计数的值减一代表已通知处理了一次,当所述引用计数为预定阈值例如为零时,代表所述消息已完成通知处理完毕,因此通过所述用户销毁函数释放所述消息,具体地,所述消息通过N个消息侦听上下文侦听,则关联了N个线程和消息处理函数,其引用计数的初始值为N,每个消息处理函数对消息处理后会对引用计数的值减一,当减到为零时说明都处理完了,因此配合所述用户销毁函数销毁所述消息以释放内存。
综上所述,本发明提供的跨线程消息处理方法以简单高效的方式例如在C语言项目中实现多线程间消息通知机制和消息处理机制,以在需要于不同线程间调用操作相同竞争资源的函数时并不直接调用函数,而是发送包括消息名、用户数据、引用计数和用户数据销毁函数的消息,根据所述用户数据执行对应所述消息侦听上下文列表的消息处理函数,这样的开发模式就可以解决多线程非线程安全调用的加锁问题,实现免锁开发。
【第二实施例】
请参见图2,图2为本发明实施例提供的跨线程消息处理装置的模块示意图。跨线程消息处理装置10包括:
消息获取模块11,用于接收消息并获取所述消息的消息结构,其中所述消息结构包括消息名;
消息侦听模块12,用于根据所述消息名获得与所述消息对应的消息侦听上下文列表,具体地,基于所述消息名从全局消息源对象列表中查找与所述消息名对应的消息源对象;若在所述全局消息源对象列表中查找到与所述消息名对应的所述消息源对象,则创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;以及若在所述全局消息源对象列表中没有查找到与所述消息名对应的所述消息源对象,则创建与所述消息名对应的消息源对象并将创建的所述消息源对象追加到所述全局消息源对象列表中,创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;以及
消息处理模块13,用于根据所述消息结构执行对应所述消息侦听上下文列表的消息处理函数,具体地,所述消息结构还包括用户数据、引用计数和用户销毁函数,根据所述消息名、所述用户数据和所述用户销毁函数建立新的消息结构,发送所述新的消息结构至与所述消息侦听上下文列表中的所述至少一个消息侦听上下文对应的所述线程上下文;执行与所述线程上下文对应的所述消息处理函数;以及对所述引用计数减引用。
在一个具体实施例中,所述消息结构还包括用户销毁函数;跨线程消息处理装置10还包括消息释放模块,用于当所述引用计数为预定阈值时,通过所述用户销毁函数释放所述消息。
本实施例中的跨线程消息处理装置10中的各模块之间的具体工作过程和技术效果参见前述第一实施例的描述,此处不再赘述。
【第三实施例】
请参见图3,图3为本发明实施例提供的跨线程消息处理系统的结构示意图。跨线程消息处理系统20包括处理器21和存储器22;其中存储器22存储有处理器21执行的指令,且所述指令使得处理器21执行操作以进行如前述所述的跨线程消息处理方法。
【第四实施例】
请参见图4,图4为本发明第四实施例提供的计算机可读存储介质的模块示意图。计算机可读存储介质30例如为非易失性存储器,其例如为:磁介质(如硬盘、软盘和磁带),光介质(如CDROM盘和DVD),磁光介质(如光盘)以及专门构造为用于存储和执行计算机可执行指令的硬件装置(如只读存储器(ROM)、随机存取存储器(RAM)、闪存等)。计算机可读存储介质30上存储有计算机可执行指令31。计算机可读存储介质30可由一个或多个处理器或处理装置来执行计算机可执行指令31,以实施前述第一实施例中的跨线程消息处理方法。
此外,可以理解的是,前述各个实施例仅为本申请的示例性说明,在技术特征不冲突、结构不矛盾、不违背本申请的发明目的前提下,各个实施例的技术方案可以任意组合、搭配使用。
在本申请所提供的几个实施例中,应当理解,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多路单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多路网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种跨线程消息处理方法,其特征在于,包括:
接收消息并获取所述消息的消息结构,其中所述消息结构包括消息名;
根据所述消息名获得与所述消息对应的消息侦听上下文列表;以及
根据所述消息结构执行对应所述消息侦听上下文列表的消息处理函数。
2.根据权利要求1所述的跨线程消息处理方法,其特征在于,还包括:
建立指定消息名的侦听,具体为基于所述指定消息名从全局消息源对象列表中查找与所述指定消息名对应的消息源对象;
若在所述全局消息源对象列表中查找到与所述指定消息名对应的所述消息源对象,则创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;
若在所述全局消息源对象列表中没有查找到与所述指定消息名对应的所述消息源对象,则创建与所述指定消息名对应的消息源对象并将创建的所述消息源对象追加到所述全局消息源对象列表中,创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;
所述根据所述消息名获得与所述消息对应的消息侦听上下文列表,包括:
基于所述消息名从所述全局消息源对象列表中查找与所述消息名匹配的所述指定消息名并获得对应的所述消息侦听上下文列表。
3.根据权利要求1所述的跨线程消息处理方法,其特征在于,所述消息结构还包括用户数据、引用计数和用户销毁函数,所述根据所述消息结构执行对应所述消息侦听上下文列表的消息处理函数,包括:
根据所述消息结构中的所述消息名、所述用户数据和所述用户销毁函数建立新的消息结构;
发送所述新的消息结构至与所述消息侦听上下文列表中的所述至少一个消息侦听上下文对应的所述线程上下文;
执行与所述线程上下文对应的所述消息处理函数;以及
对所述引用计数减引用。
4.根据权利要求3所述的跨线程消息处理方法,其特征在于,所述跨线程消息处理方法还包括:
当所述引用计数为预定阈值时,通过所述用户销毁函数释放所述消息。
5.一种跨线程消息处理装置,其特征在于,包括:
消息获取模块,用于接收消息并获取所述消息的消息结构,其中所述消息结构包括消息名;
消息侦听模块,用于根据所述消息名获得与所述消息对应的消息侦听上下文列表;以及
消息处理模块,用于根据所述消息结构执行对应所述消息侦听上下文列表的消息处理函数。
6.根据权利要求5所述的跨线程消息处理装置,其特征在于,还包括消息侦听建立模块,用于:
将指定消息名从全局消息源对象列表中查找与所述指定消息名对应的消息源对象;
若在所述全局消息源对象列表中查找到与所述指定消息名对应的所述消息源对象,则创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;
若在所述全局消息源对象列表中没有查找到与所述指定消息名对应的所述消息源对象,则创建与所述消息名对应的消息源对象并将创建的所述消息源对象追加到所述全局消息源对象列表中,创建所述至少一个消息侦听上下文,关联对应的所述线程上下文和所述消息处理函数,并将所述至少一个消息侦听上下文追加到与所述消息源对象对应的所述消息侦听上下文列表中;
所述消息侦听模块,具体用于:
基于所述消息名从所述全局消息源对象列表中查找与所述消息名匹配的所述指定消息名并获得对应的所述消息侦听上下文列表。
7.根据权利要求5所述的跨线程消息处理装置,其特征在于,所述消息结构还包括用户数据、引用计数和用户销毁函数,所述消息处理模块,具体用于:
根据所述消息名、所述用户数据和所述用户销毁函数建立新的消息结构;
发送所述新的消息结构至与所述消息侦听上下文列表中的所述至少一个消息侦听上下文对应的所述线程上下文;
执行与所述线程上下文对应的所述消息处理函数;以及
对所述引用计数减引用。
8.根据权利要求7所述的跨线程消息处理装置,其特征在于,所述跨线程消息处理装置还包括:消息释放模块,用于当所述引用计数为预定阈值时,通过所述用户销毁函数释放所述消息。
9.一种跨线程消息处理系统,其特征在于,包括:存储器和连接所述存储器的处理器,所述存储器存储计算机程序,所述处理器运行所述计算机程序时执行如权利要求1至4任意一项所述的跨线程消息处理方法。
10.一种计算机可读存储介质,其为非易失性存储器且存储有计算机可执行指令,其特征在于,所述计算机可执行指令用于执行如权利要求1至4任意一项所述的跨线程消息处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910973960.9A CN112732453A (zh) | 2019-10-14 | 2019-10-14 | 跨线程消息处理方法、装置、系统和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910973960.9A CN112732453A (zh) | 2019-10-14 | 2019-10-14 | 跨线程消息处理方法、装置、系统和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112732453A true CN112732453A (zh) | 2021-04-30 |
Family
ID=75588533
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910973960.9A Pending CN112732453A (zh) | 2019-10-14 | 2019-10-14 | 跨线程消息处理方法、装置、系统和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112732453A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114372260A (zh) * | 2022-03-22 | 2022-04-19 | 荣耀终端有限公司 | 一种多线程处理方法及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060248536A1 (en) * | 2005-04-29 | 2006-11-02 | International Business Machines | Message system and method |
CN103092682A (zh) * | 2011-10-28 | 2013-05-08 | 浙江大华技术股份有限公司 | 异步网络应用程序处理方法 |
WO2015127069A1 (en) * | 2014-02-24 | 2015-08-27 | Entefy, Inc. | System and method of message threading for a multi-format, multi-protocol communication system |
US20160283295A1 (en) * | 2015-03-27 | 2016-09-29 | Intel Corporation | Isolating communication streams to achieve high performance multi-threaded communication for global address space programs |
CN108762942A (zh) * | 2018-04-12 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN109756490A (zh) * | 2018-12-26 | 2019-05-14 | 新华三技术有限公司 | 一种mdc实现方法及装置 |
-
2019
- 2019-10-14 CN CN201910973960.9A patent/CN112732453A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060248536A1 (en) * | 2005-04-29 | 2006-11-02 | International Business Machines | Message system and method |
CN103092682A (zh) * | 2011-10-28 | 2013-05-08 | 浙江大华技术股份有限公司 | 异步网络应用程序处理方法 |
WO2015127069A1 (en) * | 2014-02-24 | 2015-08-27 | Entefy, Inc. | System and method of message threading for a multi-format, multi-protocol communication system |
US20160283295A1 (en) * | 2015-03-27 | 2016-09-29 | Intel Corporation | Isolating communication streams to achieve high performance multi-threaded communication for global address space programs |
CN108762942A (zh) * | 2018-04-12 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN109756490A (zh) * | 2018-12-26 | 2019-05-14 | 新华三技术有限公司 | 一种mdc实现方法及装置 |
Non-Patent Citations (2)
Title |
---|
MCCARTNEY: "Stackless Multi-Threading for Embedded Systems", 《IEEE TRANSACTIONS ON COMPUTERS》, vol. 64, no. 10, pages 2940 - 2952, XP011668171, DOI: 10.1109/TC.2014.2378256 * |
陈建华;苗放;: "Windows线程、窗口与消息内在机制研究", 微计算机信息, no. 12, pages 251 - 253 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114372260A (zh) * | 2022-03-22 | 2022-04-19 | 荣耀终端有限公司 | 一种多线程处理方法及电子设备 |
CN114372260B (zh) * | 2022-03-22 | 2022-07-22 | 荣耀终端有限公司 | 一种多线程处理方法及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107291558B (zh) | 一种应用程序接口死锁监控方法和装置 | |
US10095562B2 (en) | System and method for transforming a queue from non-blocking to blocking | |
US8769546B2 (en) | Busy-wait time for threads | |
CN110750315B (zh) | Android系统中的类加载方法、装置、设备和存储介质 | |
US9110715B2 (en) | System and method for using a sequencer in a concurrent priority queue | |
CN109831394B (zh) | 数据处理方法、终端以及计算机存储介质 | |
CN106250229B (zh) | 事件处理的方法及装置 | |
CN111314429B (zh) | 一种网络请求处理系统和方法 | |
CN110457132B (zh) | 一种功能对象的创建方法、装置和终端设备 | |
CN115658153A (zh) | 睡眠锁优化方法、装置、电子设备及存储介质 | |
CN112732453A (zh) | 跨线程消息处理方法、装置、系统和计算机可读存储介质 | |
CN111290842A (zh) | 一种任务执行方法和装置 | |
CN112000670B (zh) | 一种多线程程序数据统一管理方法、系统及电子设备 | |
CN109005465B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN113127775A (zh) | 一种页面加载方法、装置、设备和存储介质 | |
CN109274988B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN108810644B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN110442404A (zh) | 一种对象释放方法、装置、设备和存储介质 | |
CN112506641B (zh) | 一种对象智能释放方法、装置和终端设备 | |
WO2022135015A1 (zh) | 服务信息获取方法、装置、计算机设备和存储介质 | |
CN114327828B (zh) | 一种共享数据的无锁并发访问方法、装置、设备及介质 | |
CN114461410A (zh) | 分布式锁的实现方法、装置、电子设备及存储介质 | |
US9378045B2 (en) | System and method for supporting cooperative concurrency in a middleware machine environment | |
CN112882853A (zh) | 一种数据处理方法、装置及设备 | |
CN117350731A (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 |