无锁消息队列实现方法技术

技术编号:8834122 阅读:446 留言:0更新日期:2013-06-22 20:23
本发明专利技术提供一种无锁消息队列实现方法,所述方法包括:S1:主线程获取消息,将所述消息保存在消息队列中;S2:主线程检测所有工作线程是否有空闲工作线程;若没有,则继续检测所有工作线程,直到检测到空闲工作线程,则跳转步骤S3;若有,则跳转步骤S3;S3:主线程将所述消息发送给空闲工作线程,空闲工作线程接收所述消息并处理所述消息,空闲工作线程变为工作线程;S4:工作线程处理完所述消息后,将空闲信号发送给主线程。本发明专利技术通过提供一种无锁消息队列实现方法,在避免锁的情况下,提高了性能,减少了程序死锁的危险,简化了代码调试工作。

【技术实现步骤摘要】

本专利技术涉及云计算技术,特别涉及一种。
技术介绍
在线程/进程模型中,一般用生产者/消费者模型来实现线程/进程之间通信。这种模型使用信号量来抢消息,并用锁来保证各个线程/进程对全局消息队列安全访问。然而,生产者/消费者模型,频繁使用锁,导致性能低下。
技术实现思路
(一)解决的技术问题本专利技术解决的技术问题是如何解决生产者/消费者模型中对锁和信号量无效操作导致的性能损失。(二)技术方案本专利技术提供了一种,所述方法包括:S1:主线程获取消息,将所述消息保存在消息队列中;S2:主线程检测所有工作线程是否有空闲工作线程;若没有,则继续检测所有工作线程,直到检测到空闲工作线程,则跳转步骤S3 ;若有,则跳转步骤S3 ;S3:主线程将所述消息发送给空闲工作线程,空闲工作线程接收所述消息并处理所述消息,空闲工作线程变为工作线程;S4:工作线程处理完所述消息后,将空闲信号发送给主线程。优选地,步骤S3中所述主线程将所述消息发送给空闲工作线程后,主线程将空闲工作线程的休眠状态变为工作状态。优选地,步骤S4之后工作线程进入休眠状态。优选地,步骤S4之后还包括:主线程接收到工作线程发送的空闲信号后,将工作线程置于空闲工作线程中。(三)有益效果本专利技术通过提供一种,在避免锁的情况下,提高了性能,减少了程序死锁的危险,简化了代码调试工作。附图说明图1是本专利技术提供的方法流程图。具体实施例方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述。本专利技术提供了一种,如图1所示,使用生产者分派消息模式,改变原有消费者获取消息模式。所述方法包括:S1:主线程获取消息,将所述消息保存在消息队列中;主线程即为生产者,该消息为外部发送的消息。S2:主线程检测所有工作线程是否有空闲工作线程;若没有,则继续检测所有工作线程,直到检测到空闲工作线程,则跳转步骤S3 ;若有,则跳转步骤S3 ;工作线程即为消费者。S3:主线程将所述消息发送给空闲工作线程,空闲工作线程接收所述消息并处理所述消息,空闲工作线程变为工作线程;所述主线程将所述消息发送给空闲工作线程后,主线程将空闲工作线程的休眠状态变为工作状态。S4:工作线程处理完所述消息后,将空闲信号发送给主线程。该工作线程进入休眠状态。主线程接收到工作线程发送的空闲信号后,将工作线程置于空闲工作线程中。通过采用一种,主线程不但接收外部发送的消息,还接收工作线程的空闲信号,利用该空闲信号,得到所有工作线程的状态,并根据该状态,由主线程主动发送消息给工作线程,从而可以不用锁,提高了效率。以上实施方式仅用于说明本专利技术,而并非对本专利技术的限制,有关
的普通技术人员,在不脱离本专利技术的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本专利技术的范畴,本专利技术的专利保护范围应由权利要求限定。本文档来自技高网
...

【技术保护点】
一种无锁消息队列实现方法,其特征在于,所述方法包括:S1:主线程获取消息,将所述消息保存在消息队列中;S2:主线程检测所有工作线程是否有空闲工作线程;若没有,则继续检测所有工作线程,直到检测到空闲工作线程,则跳转步骤S3;若有,则跳转步骤S3;S3:主线程将所述消息发送给空闲工作线程,空闲工作线程接收所述消息并处理所述消息,空闲工作线程变为工作线程;S4:工作线程处理完所述消息后,将空闲信号发送给主线程。

【技术特征摘要】
1.一种无锁消息队列实现方法,其特征在于,所述方法包括: S1:主线程获取消息,将所述消息保存在消息队列中; 52:主线程检测所有工作线程是否有空闲工作线程;若没有,则继续检测所有工作线程,直到检测到空闲工作线程,则跳转步骤S3 ;若有,则跳转步骤S3 ; 53:主线程将所述消息发送给空闲工作线程,空闲工作线程接收所述消息并处理所述消息,空闲工作线程变为工作线程; 54:工作线...

【专利技术属性】
技术研发人员:薛国良
申请(专利权)人:汉柏科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1