一种适用于多生产者多消费者模式的数据管理方法及系统技术方案

技术编号:15297520 阅读:57 留言:0更新日期:2017-05-11 19:59
本申请公开了一种适用于多生产者多消费者模式的数据管理方法,包括:当多个生产者中的任一生产者产生新数据元素,则利用std::atomic类型,判断预设队列当前是否符合入列条件,如果是,则将该新数据元素缓存至预设队列,如果否,则禁止将该新数据元素缓存至预设队列;当多个消费者中的任一消费者需要对预设队列中缓存的数据元素进行处理,则利用std::atomic类型,判断预设队列当前是否符合出列条件,如果是,则从当前预设队列中提取出相应的数据元素,并发送至相应的消费者以进行相应处理。本申请能够在实现多生产者多消费者模式的过程中,保证了软件程序的稳定性和执行效率。另外,本申请还相应公开了一种数据管理系统。

Data management method and system suitable for multi producer multi consumer mode

Including data management method, the invention discloses a producer consumer model more suitable for multi: when any producer multiple producers in generating new data elements, using std:: atomic type, the current queue is in accordance with the preset judgment into the conditions, if it is, then the new data elements to the default cache queue, if not, is banning the use of the new data elements to the default cache queue; when any consumer multiple consumers in need of data processing elements in the queue cache default, using std:: atomic type, pre judgment set is in accordance with the current queue out conditions, if it is, from the current default extracted corresponding data elements in the queue, and sent to the relevant consumers to be treated accordingly. The application can ensure the stability and efficiency of the software program in the process of realizing the multi producer and multi consumer model. In addition, the invention also discloses a data management system.

【技术实现步骤摘要】

本专利技术涉及计算机软件
,特别涉及一种适用于多生产者多消费者模式的数据管理方法及系统
技术介绍
目前,在传统软件技术的多生产者多消费者模式下,为了保证数据的正确性,需要引入互斥锁,否则将会导致多线程同时访问队列数据而引起线程同时进入互斥区等问题。然而,在多生产者多消费者模式的实现过程中,互斥锁的引入,将会导致在队列访问负载较大的情况下造成CPU效率低下甚至引发程序的死锁等问题。综上所述可以看出,如何在实现多生产者多消费者模式的过程中,保证软件程序的稳定性和执行效率是目前有待解决的问题。
技术实现思路
有鉴于此,本专利技术的目的在于提供一种适用于多生产者多消费者模式的数据管理方法及系统,能够在实现多生产者多消费者模式的过程中,保证了软件程序的稳定性和执行效率。其具体方案如下:一种适用于多生产者多消费者模式的数据管理方法,包括:当多个生产者中的任一生产者产生新数据元素,则利用std::atomic类型,判断预设队列当前是否符合入列条件,如果是,则将该新数据元素缓存至所述预设队列,如果否,则禁止将该新数据元素缓存至所述预设队列;当多个消费者中的任一消费者需要对所述预设队列中缓存的数据元素进行处理,则利用std::atomic类型,判断所述预设队列当前是否符合出列条件,如果是,则从当前所述预设队列中提取出相应的数据元素,并发送至相应的消费者,以进行相应的数据处理。可选的,所述判断预设队列当前是否符合入列条件的过程,包括:判断所述预设队列当前是否已经存满,如果否,则判定当前所述预设队列符合入列条件,如果是,则判定当前所述预设队列不符合入列条件。可选的,所述判断所述预设队列当前是否符合出列条件的过程,包括:判断当前所述预设队列中是否存在未处理的数据元素,如果是,则判定当前所述预设队列符合出列条件,如果否,则判定当前所述预设队列不符合出列条件。可选的,所述方法,还包括:对所述预设队列进行实时监视;若监视到当前所述预设队列中的剩余缓存空间容量小于预设容量阈值,则发出相应的容量预警信息。可选的,所述预设队列为环形缓冲区。本专利技术还相应公开了一种适用于多生产者多消费者模式的数据管理系统,包括:入列管理模块,用于当多个生产者中的任一生产者产生新数据元素,则利用std::atomic类型,判断预设队列当前是否符合入列条件,如果是,则将该新数据元素缓存至所述预设队列,如果否,则禁止将该新数据元素缓存至所述预设队列;出列管理模块,用于当多个消费者中的任一消费者需要对所述预设队列中缓存的数据元素进行处理,则利用std::atomic类型,判断所述预设队列当前是否符合出列条件,如果是,则从当前所述预设队列中提取出相应的数据元素,并发送至相应的消费者,以进行相应的数据处理。可选的,所述入列管理模块,包括:第一判断单元,用于当多个生产者中的任一生产者产生新数据元素,则利用std::atomic类型,判断所述预设队列当前是否已经存满,如果否,则判定当前所述预设队列符合入列条件,如果是,则判定当前所述预设队列不符合入列条件;入列控制单元,用于当所述第一判断单元判定当前所述预设队列符合入列条件,则将该新数据元素缓存至所述预设队列,当所述第一判断单元判定当前所述预设队列不符合入列条件,则禁止将该新数据元素缓存至所述预设队列。可选的,所述出列管理模块,包括:第二判断单元,用于当多个消费者中的任一消费者需要对所述预设队列中缓存的数据元素进行处理,则利用std::atomic类型,判断当前所述预设队列中是否存在未处理的数据元素,如果是,则判定当前所述预设队列符合出列条件,如果否,则判定当前所述预设队列不符合出列条件;出列管理单元,用于当所述第二判断单元判定当前所述预设队列符合出列条件,则从当前所述预设队列中提取出相应的数据元素,并发送至相应的消费者,以进行相应的数据处理。可选的,所述数据管理系统,还包括:队列监视模块,用于对所述预设队列进行实时监视;容量预警模块,用于当所述队列监视模块监视到当前所述预设队列中的剩余缓存空间容量小于预设容量阈值,则发出相应的容量预警信息。可选的,所述预设队列为环形缓冲区。本专利技术中,适用于多生产者多消费者模式的数据管理方法,包括:当多个生产者中的任一生产者产生新数据元素,则利用std::atomic类型,判断预设队列当前是否符合入列条件,如果是,则将该新数据元素缓存至预设队列,如果否,则禁止将该新数据元素缓存至预设队列;当多个消费者中的任一消费者需要对预设队列中缓存的数据元素进行处理,则利用std::atomic类型,判断预设队列当前是否符合出列条件,如果是,则从当前预设队列中提取出相应的数据元素,并发送至相应的消费者,以进行相应的数据处理。可见,本专利技术在多生产者多消费者模式下,若任一生产者产生新数据元素,则会利用std::atomic类型来判断预设队列当前是否符合入列条件,然后根据该判断结果来决定是否允许将上新数据元素缓存至上述预设队列,若任一消费者试图对上述预设队列中缓存的数据元素进行处理,则会利用std::atomic类型来判断上述预设队列当前是否符合出列条件,如果是,则会从上述预设队列中提取出待处理数据,然后发送至相应的消费者以进行相应的数据处理。由于std::atomic类型对象能够在不同的线程访问中避免数据竞争事件的发生,从而使得上述基于std::atomic类型的数据访问过程能够稳定可靠地进行,并具有较高的执行效率。也即,本专利技术能够在实现多生产者多消费者模式的过程中,保证了软件程序的稳定性和执行效率。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为本专利技术实施例公开的一种适用于多生产者多消费者模式的数据管理方法流程图;图2为本专利技术实施例公开的一种适用于多生产者多消费者模式的数据入列管理方法流程图;图3为本专利技术实施例公开的一种适用于多生产者多消费者模式的数据出列管理方法流程图;图4为本专利技术实施例公开的一种适用于多生产者多消费者模式的数据管理系统结构示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术实施例公开了一种适用于多生产者多消费者模式的数据管理方法,参见图1所示,该方法包括:步骤S11:当多个生产者中的任一生产者产生新数据元素,则利用std::atomic类型,判断预设队列当前是否符合入列条件,如果是,则将该新数据元素缓存至预设队列,如果否,则禁止将该新数据元素缓存至预设队列;步骤S12:当多个消费者中的任一消费者需要对预设队列中缓存的数据元素进行处理,则利用std::atomic类型,判断预设队列当前是否符合出列条件,如果是,则从当前预设队列中提取出相应的数据元素,并发送至相应的消费者,以进行相应的数据处理。可以理解的是,上述步骤S11和步骤S1本文档来自技高网...
一种适用于多生产者多消费者模式的数据管理方法及系统

【技术保护点】
一种适用于多生产者多消费者模式的数据管理方法,其特征在于,包括:当多个生产者中的任一生产者产生新数据元素,则利用std::atomic类型,判断预设队列当前是否符合入列条件,如果是,则将该新数据元素缓存至所述预设队列,如果否,则禁止将该新数据元素缓存至所述预设队列;当多个消费者中的任一消费者需要对所述预设队列中缓存的数据元素进行处理,则利用std::atomic类型,判断所述预设队列当前是否符合出列条件,如果是,则从当前所述预设队列中提取出相应的数据元素,并发送至相应的消费者,以进行相应的数据处理。

【技术特征摘要】
1.一种适用于多生产者多消费者模式的数据管理方法,其特征在于,包括:当多个生产者中的任一生产者产生新数据元素,则利用std::atomic类型,判断预设队列当前是否符合入列条件,如果是,则将该新数据元素缓存至所述预设队列,如果否,则禁止将该新数据元素缓存至所述预设队列;当多个消费者中的任一消费者需要对所述预设队列中缓存的数据元素进行处理,则利用std::atomic类型,判断所述预设队列当前是否符合出列条件,如果是,则从当前所述预设队列中提取出相应的数据元素,并发送至相应的消费者,以进行相应的数据处理。2.根据权利要求1所述的适用于多生产者多消费者模式的数据管理方法,其特征在于,所述判断预设队列当前是否符合入列条件的过程,包括:判断所述预设队列当前是否已经存满,如果否,则判定当前所述预设队列符合入列条件,如果是,则判定当前所述预设队列不符合入列条件。3.根据权利要求1所述的适用于多生产者多消费者模式的数据管理方法,其特征在于,所述判断所述预设队列当前是否符合出列条件的过程,包括:判断当前所述预设队列中是否存在未处理的数据元素,如果是,则判定当前所述预设队列符合出列条件,如果否,则判定当前所述预设队列不符合出列条件。4.根据权利要求1所述的适用于多生产者多消费者模式的数据管理方法,其特征在于,还包括:对所述预设队列进行实时监视;若监视到当前所述预设队列中的剩余缓存空间容量小于预设容量阈值,则发出相应的容量预警信息。5.根据权利要求1至4任一项所述的适用于多生产者多消费者模式的数据管理方法,其特征在于,所述预设队列为环形缓冲区。6.一种适用于多生产者多消费者模式的数据管理系统,其特征在于,包括:入列管理模块,用于当多个生产者中的任一生产者产生新数据元素,则利用std::atomic类型,判断预设队列当前是否符合入列条件,如果是,则将该新数据元素缓存至所述预设队列,如果否,则禁止将该新数据元素缓存至所述预设队列;出列管理模块,用...

【专利技术属性】
技术研发人员:肖山林
申请(专利权)人:深圳竹信科技有限公司
类型:发明
国别省市:广东;44

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

1