信号量(semaphores)的发明可以追述到20世纪60年代中期。使用信号量的最初目的是为了给共享资源建立一个标志,该标志表示该共享资源被占用情况。这样,当一个任务在访问共享资源之前,就可以先对这个标志进行查询,从而在了解资源被占用的情况之后,再来决定自己的行为。在实际生活中,信号量其实无处不在,例如停车场,假如停车场有一百个停车位,那么在没有车辆驶入的情况下信号量就是100,当驶入一辆汽车信号量减1,驶出一辆汽车信号量就加1。当驶入的汽车为100的时候,信号量就会为0,这个时候如果还有汽车准备驶入停车场就无法再获取到信号量了从而禁止驶入。直到有汽车驶出停车场后信号量才会被释放,这个时候之前想要驶入停车场的汽车就会获得刚刚释放的信号量从而准许进入停车场。在实际应用中使用信号量主要是实现以下两个功能:
1. 两个任务之间或者中断函数跟任务之间的同步功能,其实就是共享资源为1的时候。
2. 多个共享资源的管理,就像上面举的停车场的例子。
|