第二章 进程的描述与控制(三)

 进程同步的关键:不被打断的进行标志值的判断与修改。 

 信号量:用来保证两个或多个关键代码段不被并发调用,用于进程同步控制的一种变量。只能被操作系统的原语赋值。

        定义信号量semaphore代表可用资源实体的数量,又叫信号灯。 当>=0,代表可供并发进程使用的资源实体数。  当<=0,代表正在等待使用该资源的进程数。建立一个必须经过说明,包括  信号量所代表的意义、  赋初值、  建立相应的数据结构,以便指向等待使用临界区的进程。 除初值外,信号量的值仅能由标准原子操作P、V操作来改变。 

整型信号量 在 signal释放资源后,当CPU被分配给等待进程后,等待进程仍可继续执行。(有限等待)      wait操作,当s<=0时,当前进程会一直占着CPU不断测试(空转),信号量原语不能被打断,陷入忙等。

实现互斥     互斥信号量 互斥信号量mutex初值为1;每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间 ;必须成对使用P和V原语(在同一进程中),不能次序错误、重复或者遗漏。遗漏P原语则不能保证互斥访问;遗漏V原语则不能在使用临界资源之后将其释放。        

                                                     

实现有序    并发执行的进程P1和P2中,分别有代码C1和C2,要求C1要在C2开始前完成(前驱关系)。 为每对前驱关系设置一个同步信号量S12,并赋初值为0.则只有V操作所在进程获得CPU时能运行。                          

     引入信号量集的与原因: 每次只能获得或释放一个单位的资源,低效;    某些时候资源分配有下限限制;     修改:在大于可分配设置的下界值t前提下,每次可分配d个。                                                                

    信号量集的一个特例                                                                                                                                                                           只有一个信号量S的几种特殊情况:
      Swait(S, d, d),允许每次申请d个资源,若现有资源数少于d,不予分配。
      Swait(S, 1, 1),蜕化为一般的记录型信号量,一次申请一个,至多分配一个(S>1时可计数,或S=1时可控制互斥)。
      Swait(S, 1, 0),当S>=1时,允许多个进程进入某特定区,当S变为0后,阻止任何进程进入特定区,相当于可控开关。并不对                               S资源的数量产生影响。

    信号量题目一般做法                                                                                                                                                                            1.分析问题,找出同步、互斥关系
     2. 根据资源设置信号量变量
     3.写出代码过程,并注意P、V操作的位置
     4.检查代码,模拟机器运行,体验信号量的变化和程序运行过程是否正确。
           

猜你喜欢

转载自blog.csdn.net/qq_40183414/article/details/82799755