无锁消息队列实现方法

文档序号:6401200阅读:287来源:国知局
专利名称:无锁消息队列实现方法
技术领域
本发明涉及云计算技术,特别涉及一种无锁消息队列实现方法。
背景技术
在线程/进程模型中,一般用生产者/消费者模型来实现线程/进程之间通信。这种模型使用信号量来抢消息,并用锁来保证各个线程/进程对全局消息队列安全访问。然而,生产者/消费者模型,频繁使用锁,导致性能低下。

发明内容
(一)解决的技术问题本发明解决的技术问题是如何解决生产者/消费者模型中对锁和信号量无效操作导致的性能损失。(二)技术方案本发明提供了一种无锁消息队列实现方法,所述方法包括:S1:主线程获取消息,将所述消息保存在消息队列中;S2:主线程检测所有工作线程是否有空闲工作线程;若没有,则继续检测所有工作线程,直到检测到空闲工作线程,则跳转步骤S3 ;若有,则跳转步骤S3 ;S3:主线程将所述消息发送给空闲工作线程,空闲工作线程接收所述消息并处理所述消息,空闲工作线程变为工作线程;S4:工作线程处理完所述消息后,将空闲信号发送给主线程。优选地,步骤S3中所述主线程将所述消息发送给空闲工作线程后,主线程将空闲工作线程的休眠状态变为工作状态。优选地,步骤S4之后工作线程进入休眠状态。优选地,步骤S4之后还包括:主线程接收到工作线程发送的空闲信号后,将工作线程置于空闲工作线程中。(三)有益效果本发明通过提供一种无锁消息队列实现方法,在避免锁的情况下,提高了性能,减少了程序死锁的危险,简化了代码调试工作。


图1是本发明提供的方法流程图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。本发明提供了一种无锁消息队列实现方法,如图1所示,使用生产者分派消息模式,改变原有消费者获取消息模式。所述方法包括:S1:主线程获取消息,将所述消息保存在消息队列中;主线程即为生产者,该消息为外部发送的消息。S2:主线程检测所有工作线程是否有空闲工作线程;若没有,则继续检测所有工作线程,直到检测到空闲工作线程,则跳转步骤S3 ;若有,则跳转步骤S3 ;工作线程即为消费者。S3:主线程将所述消息发送给空闲工作线程,空闲工作线程接收所述消息并处理所述消息,空闲工作线程变为工作线程;所述主线程将所述消息发送给空闲工作线程后,主线程将空闲工作线程的休眠状态变为工作状态。S4:工作线程处理完所述消息后,将空闲信号发送给主线程。该工作线程进入休眠状态。主线程接收到工作线程发送的空闲信号后,将工作线程置于空闲工作线程中。通过采用一种无锁消息队列实现方法,主线程不但接收外部发送的消息,还接收工作线程的空闲信号,利用该空闲信号,得到所有工作线程的状态,并根据该状态,由主线程主动发送消息给工作线程,从而可以不用锁,提高了效率。以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
权利要求
1.一种无锁消息队列实现方法,其特征在于,所述方法包括: S1:主线程获取消息,将所述消息保存在消息队列中; 52:主线程检测所有工作线程是否有空闲工作线程;若没有,则继续检测所有工作线程,直到检测到空闲工作线程,则跳转步骤S3 ;若有,则跳转步骤S3 ; 53:主线程将所述消息发送给空闲工作线程,空闲工作线程接收所述消息并处理所述消息,空闲工作线程变为工作线程; 54:工作线程处理完所述消息后,将空闲信号发送给主线程。
2.根据权利要求1所述的方法,其特征在于,步骤S3中所述主线程将所述消息发送给空闲工作线程后,主线程将空闲工作线程的休眠状态变为工作状态。
3.根据权利要求1所述的方法,其特征在于,步骤S4之后工作线程进入休眠状态。
4.根据权利要求1所述的方法,其特征在于,步骤S4之后还包括:主线程接收到工作线程发送的空闲信号后,将工作线程置于空闲工作线程中。
全文摘要
本发明提供一种无锁消息队列实现方法,所述方法包括S1主线程获取消息,将所述消息保存在消息队列中;S2主线程检测所有工作线程是否有空闲工作线程;若没有,则继续检测所有工作线程,直到检测到空闲工作线程,则跳转步骤S3;若有,则跳转步骤S3;S3主线程将所述消息发送给空闲工作线程,空闲工作线程接收所述消息并处理所述消息,空闲工作线程变为工作线程;S4工作线程处理完所述消息后,将空闲信号发送给主线程。本发明通过提供一种无锁消息队列实现方法,在避免锁的情况下,提高了性能,减少了程序死锁的危险,简化了代码调试工作。
文档编号G06F9/46GK103164267SQ20131010675
公开日2013年6月19日 申请日期2013年3月29日 优先权日2013年3月29日
发明者薛国良 申请人:汉柏科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1