软考复习之信号量

信号量

信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。

信号量值的含义

  • n>0:当前有可用资源,可用资源数量为n

  • n=0:资源都被占用,可用资源数量为0

  • n<0:资源都被占用,并且还有n个进程正在排队

PV操作

PV操作是一种实现进程互斥与同步的有效方法。

PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。

注意:

  1. P(S)和V(S)都是在同一个信号量S上操作

  2. 约定P(S)和V(S)必须是两个不可被中断的过程

  3. PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用

P操作的主要动作是:

①S减1;

②若S减1后仍大于或等于0,则进程继续执行;

③若S减1后小于0,则该进程被阻塞后放入等待该信号量的等待队列中,然后转进程调度。

V操作的主要动作是:

①S加1;

②若相加后结果大于0,则进程继续执行;

③若相加后结果小于或等于0,则从该信号的等待队列中释放一个等待进程,然后再返回原进程继续执行或转进程调度。

如果再考到其他的点我再加吧


软考复习之信号量
2022/09/24/subject/qccstp/Semaphore/
作者
charlesix59
发布于
2022年9月24日
许可协议