mutex+condition_variable实现信号量

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. 信号量实现

  

扫描二维码关注公众号,回复: 11273910 查看本文章

未完待续。。。。。。

猜你喜欢

转载自www.cnblogs.com/yanghh/p/12965395.html
今日推荐