1. 基本介绍
信号量是一个整数 count,提供两个原子(atom,不可分割)操作:P 操作和 V 操作,或是说 wait 和 signal 操作。
1)P操作 (wait操作):count 减1,如果 count < 0 那么挂起执行线程。
--count; //表示申请一个资源 if (count < 0) //表示没有空闲资源 { 调用进程进入等待队列Queue; 阻塞进程; }
2)V操作 (signal操作):count 加1,如果 count <= 0 那么唤醒一个执行线程。
++count; //表示释放一个资源 if (count <= 0) //表示有进程处于阻塞状态 { 从等待队列Queue中取出一个进程P; 进程P进入就绪队列; }
说明:来一个进程取一把锁(count减1),如果发现锁的数量小于0,即没有锁了? 于是只能进行(wait),直到有其它进程释放出一把锁为止。
进程的事情办完后,要出去了,还回一把锁(count加1),如果发现 count <=0,即有进程在等,于是把自己的锁给它,唤醒一个等待的线程。
2. 信号量实现
未完待续。。。。。。