信号量实现 同步&互斥 分析

信号量

作用

实现进程控制,实现进程的同步与互斥

本质

本质是一个计数器 + PCB等待队列计数器对资源的计数进行加1或减1操作

实现互斥同步

互斥:不同的进程,在同一时刻,只能有一个进程对临界资源进行访问
同步:保证进程对临界资源访问的合理性

实例分析

互斥的实现

是由于计数器初始化时设置为 1,即信号量表示仅 1 个资源可用,仅 1 个进程可访问临界资源

现在有进程 A 和 B 对临界资源进行访问,进程等待队列及计数器的状态如下:
在这里插入图片描述

  1. 在进程 A 对临界资源进行访问前,计数器先判断计数器中的值是否小于等于 0:
    如果不是,计数器减1进行访问,访问完成后计数器加 1;
    如果是,计数器减 1,将进程 A 加入 PCB 等待队列进行阻塞等待
  2. 当结束资源访问,直接对资源计数器进行加 1 操作,结束访问
  3. 如果有进程结束访问,判断是否需要唤醒等待队列中进程,计数器先判断计数器中的值是否小于等于 0:
    如果不是,说明等待队列中没有进程等待
    如果是,说明等待队列中有进程等待,需要唤醒等待队列进程

同步的实现

是由于信号量是一个对资源的计数器,计数器取值不限于 1 ,信号量的取值代表资源数量 + PCB等待队列

现有 1 个信号量当中的计数器值为10,把进程与资源的关系换为车与商场停车位的关系,10个车位,A,B,C 在等待中,图示如下:

在这里插入图片描述
当资源被其他进程释放或重新生产出资源计数器进行加 1 操作,判断计数器是否小于等于 0 :
如果不是,就不需要通知
如果是,通知 PCB 等待队列进程唤醒后访问

PV操作

信号量减1,P操作;信号量加 1,V操作

发布了47 篇原创文章 · 获赞 108 · 访问量 4722

猜你喜欢

转载自blog.csdn.net/qq_44759710/article/details/104371282
今日推荐