[发明专利]一种带配额的信号量在审
申请号: | 201410043415.7 | 申请日: | 2014-01-29 |
公开(公告)号: | CN103761155A | 公开(公告)日: | 2014-04-30 |
发明(设计)人: | 吴江 | 申请(专利权)人: | 赛凡信息科技(厦门)有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 厦门市精诚新创知识产权代理有限公司 35218 | 代理人: | 张伟星 |
地址: | 361000 福建省厦门市*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 配额 信号量 | ||
技术领域
本发明涉及信号量,具体涉及一种新颖的带配额的信号量。
背景技术
众所周知,现代计算机操作系统中有多种同步原语,例如信号量,自旋锁,互斥锁和条件变量等。它们都有各自应用的场景用来实现多个进程或多个线程之间的同步和互斥。其中,信号量(Semaphore)是以一个整数变量,提供信号,以确保在并行计算环境中,不同进程在访问共享资源时,不会发生冲突。是一种不需要使用忙碌等待(busywaiting)的一种方法。信号量的概念是由荷兰计算机科学家艾兹格·迪杰斯特拉(EdsgerW.Dijkstra)发明的,广泛的应用于不同的操作系统中。在系统中,给予每一个进程一个信号量,代表每个进程目前的状态,未得到控制权的进程会在特定地方被强迫停下来,等待可以继续进行的信号到来。现在信号量机制已经被广泛的应用到单处理机和多处理机系统以及计算机网络中。
在实际使用中,信号量S具备两种操作动作,之前称为V(又称signal())与P(wait())。V操作会增加信号量S的数值,P操作会减少它。其运作方式如下:
过程1:初始化,给与它一个非负数的整数值。
过程2:运行P(wait()),信号量S的值将被减少。企图进入临界区段的进程,需要先运行P(wait())。当信号量S减为负值时,进程会被挡住,不能继续;当信号量S不为负值时,进程可以获准进入临界区段。
过程3:运行V(又称signal()),信号量S的值会被增加。退出离开临界区段的进程,将会运行V(又称signal())。当信号量S不为负值时,先前被挡住的其他进程,将可获准进入临界区段。
目前的信号量适用的场景是生产者-消费者应用。生产者即为产生消息的进程,消费者为获取消息的进程。生产者生产资源(消息),消费者消耗资源(消息),当消费者消费资源的速度比生产者快的时候,资源降低为零时,消费者将被调度休眠,直到生产者生产出更多的可用的资源。同时,从上面所述的场景中可以看到,信号量这种同步原语,不考虑生产者能力远大于消费者能力的场景。
发明内容
因此,针对上述的问题,本发明提出一种带配额的信号量,该带配额的信号量是一种信号量的变种,也是一种新的同步原语,针对消费消息的进程无法快速消费足够多的消息的情况进行考虑,且能够解决一些更为复杂问题,从而解决现有技术之不足。
为了解决上述技术问题,本发明所采用的技术方案是,一种带配额的信号量,包括一个整型的变量、一个睡眠调度队列以及一个配额值,该信号量包括两个操作,V(signal())与P(wait()),其运作方式如下:
过程1:初始化,给该信号量一个非负数的整数值作为整型的变量X;同时,给该信号量一个配额值作为限制值;
过程2:运行V(signal()),变量X的值被增加,当该变量X的值增加到配额值时,将调用该信号量操作的进程挂到睡眠调度队列进行休眠,直到有其他的进程调用P操作,该变量X的值被减少小于配额值,则重新唤醒被挂到睡眠调度队列的进程;
过程3:运行P(wait()),变量X的值被减少,当该变量X的值减到0时,将调用该信号量操作的进程挂到睡眠调度队列进行休眠,直到有其他的进程调用V操作,该变量X的值被增加大于1,则重新唤醒被挂到睡眠调度队列的进程。
优选的,所述配额值为整型配额值,是对生产者的生产能力的限制值,该配额值如果没有预设,则默认为无穷大。这样,在默认的情况下,这种带配额的信号量就退化为原来的信号量,即可作为普通信号量来使用。
本发明的所谓带配额的信号量是对生产者的一种限制。这种同步原语和信号量一样,有一个整型的信号量值,但是除此之外,本发明的带配额的信号量要引入一个整型变量作为配额值。同样与信号量相似,新的同步原语(该带配额的信号量)也有P操作(消费操作),V操作(生产操作)。当V操作时,信号量值加1,当对信号量做P操作时,信号量值减1,当信号量值减到等于0时,调用信号量P操作的进程被挂到睡眠队列上睡眠,直到有其他的进程调用V操作时,信号量值大于1,被睡眠的消费者进程才被唤醒继需处理。与信号量不同的是,带配额的信号量当生产者进程调用V操作,将信号量值加1直到等于配额值时,生产者进程同样也要被挂到睡眠队列上睡眠,直到其他的消费者进程的P操作将信号量的值减小到小于配额值时,生产者进程才能被唤醒继续执行。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于赛凡信息科技(厦门)有限公司,未经赛凡信息科技(厦门)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410043415.7/2.html,转载请声明来源钻瓜专利网。