|
信号量是最常用的进程间的通信手段之一,确切的说,信号量是实现对某些临界资源的访问,用来在进程间进行互斥和同步的一种机制。递增信号量,递减信号量,等待信号量的操作可以用一个简单的停车场运作例子来说明
假设停车场只有3个车位,一开始3个车位都是空的(通过调用建立信号量函数OSSemCreat(),将其赋予初始值3并初始化等待信号量的任务列表),这是如果同时来了5辆车(有五个任务等待信号量),看门人仅允许其中3辆不受阻碍地进入(对于UC/OS-II,让等待信号量列表中优先级高的三辆。),进入的时候每位车主在登记处拿一个停车许可证(获得资源后,任务对信号量减一以便让那些排队等候的暂时不能进来的车主知道还有多少个车位(还有多少可用资源),因为进来三辆车,所以停车许可证被拿完了(信号计数值为0),然后看门人放下车拦,剩下的车则必须在入口等待,以后来的也要再门口等(因为没有资源可用了或者信号量无效).在等待的过程中,有一辆车离开了(释放信号量)然后把许可证放回登记处(信号量加1)。这时因为有一个车位(资源)看门人就让等待的车中优先级最高的那辆车进入。然后那辆进入的车的车主又拿那个许可证,以表示:车位被我占了,又少了一个,而且现在没了,你们后面的慢慢等待吧。后面的车主也给得到车位的车主们答复:别着急,我等你们的车出来,但也有个时间限制,如果你们的车实在呆得太久了我就不耐烦,我就不等了。在这个停车场系统中,车位是公共资源,每辆车好比一个任务,看门人起的就是看管信号量,允许任务共享资源的作用,而许可证就是
信号量。
大家觉得我的理解怎么样啊?如果不对,那错在哪里 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|