[发明专利]一种生产者消费者模式优化方法及系统在审
| 申请号: | 201710042298.6 | 申请日: | 2017-01-20 |
| 公开(公告)号: | CN106648476A | 公开(公告)日: | 2017-05-10 |
| 发明(设计)人: | 李延彬 | 申请(专利权)人: | 郑州云海信息技术有限公司 |
| 主分类号: | G06F3/06 | 分类号: | G06F3/06;G06F9/54 |
| 代理公司: | 北京集佳知识产权代理有限公司11227 | 代理人: | 罗满 |
| 地址: | 450018 河南省郑州市*** | 国省代码: | 河南;41 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 生产者 消费者 模式 优化 方法 系统 | ||
技术领域
本发明涉及数据访问技术领域,特别涉及一种生产者消费者模式优化方法及系统。
背景技术
当前,在生产者消费者模式中,生产者用于将消息放入缓冲区,而消费者则用于从缓冲区中取出消息。也即,在生产者消费者模式中,生产者和消费者的数据访问对象均是同一个缓冲区。生产者进程和消费者进程在对缓冲区进行数据写入操作或数据取出操作时,相应的操作结果依赖于上述两种进程在执行过程中的相对时间,也即依赖于上述两个进程的指令执行顺序,在这个过程中,很容易出现由于生产者进程和消费者进程对缓冲区中资源进行争夺而引发的数据访问异常现象。
综上,如何避免生产者消费者模式中由于资源争夺所导致的数据访问异常现象是目前有待解决的问题。
发明内容
有鉴于此,本发明的目的在于提供一种生产者消费者模式优化方法及系统,能够避免生产者消费者模式中由于资源争夺所导致的数据访问异常现象。其具体方案如下:
一种生产者消费者模式优化方法,包括:
将当前缓冲区中已写满数据的区域长度以及空闲的区域长度分别赋值给预设的信号量full和信号量empty;
若生产者进程尝试向所述缓冲区中写入新数据,则对信号量empty和预设的信号量mutex进行判断,并根据判断结果决定是否允许生产者进程向所述缓冲区写入新数据;
若消费者进程尝试从所述缓冲区中取出数据,则对信号量full和信号量mutex进行判断,并根据判断结果决定是否允许消费者进程从所述缓冲区中取出数据;
其中,若信号量mutex为1,则表示当前所述缓冲区未被任何进程占用,若信号量mutex为0,则表示当前所述缓冲区已被生产者进程或消费者进程占用。
可选的,所述对信号量empty和预设的信号量mutex进行判断,并根据判断结果决定是否允许生产者进程向所述缓冲区写入新数据的过程,包括:
判断当前信号量empty是否大于0,并且判断信号量mutex是否为1;
如果当前信号量empty大于0,并且信号量mutex为1,则将信号量mutex设为0,并通过生产者进程将新数据写入所述缓冲区,在本次数据写入操作结束之后将信号量mutex重新设为1;
如果当前信号量empty为0和/或信号量mutex为0,则禁止生产者进程向所述缓冲区中写入新数据。
可选的,在生产者进程每向所述缓冲区写入一个新数据的过程之前,均包括:
将当前信号量empty的具体数值减1;
在生产者进程每向所述缓冲区写入一个新数据的过程之后,均包括:
将当前信号量full的具体数值加1。
可选的,所述对信号量full和信号量mutex进行判断,并根据判断结果决定是否允许消费者进程从所述缓冲区中取出数据的过程,包括:
判断当前信号量full是否大于0,并且判断信号量mutex是否为1;
如果当前信号量full大于0,并且信号量mutex为1,则将信号量设为0,并通过消费者进程从所述缓冲区中取出数据,在本次数据取出操作之后将信号量mutex重新设为1;
如果当前信号量full为0和/或信号量mutex为0,则禁止消费者进程从所述缓冲区中取出数据。
可选的,在消费者进程每从所述缓冲区取出一个数据的过程之前,均包括:
将当前信号量full的具体数值减1;
在消费者进程每从所述缓冲区取出一个数据的过程之后,均包括:
将当前信号量empty的具体数据值加1。
本发明还公开了一种生产者消费者模式优化系统,包括:
信号量赋值模块,用于将当前缓冲区中已写满数据的区域长度以及空闲的区域长度分别赋值给预设的信号量full和信号量empty;
生产者管理模块,用于当生产者进程尝试向所述缓冲区中写入新数据,则对信号量empty和预设的信号量mutex进行判断,并根据判断结果决定是否允许生产者进程向所述缓冲区写入新数据;
消费者管理模块,用于当消费者进程尝试从所述缓冲区中取出数据,则对信号量full和信号量mutex进行判断,并根据判断结果决定是否允许消费者进程从所述缓冲区中取出数据;
其中,若信号量mutex为1,则表示当前所述缓冲区未被任何进程占用,若信号量mutex为0,则表示当前所述缓冲区已被生产者进程或消费者进程占用。
可选的,所述生产者管理模块,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于郑州云海信息技术有限公司,未经郑州云海信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710042298.6/2.html,转载请声明来源钻瓜专利网。





