美文网首页
同步和互斥

同步和互斥

作者: 菜根小友 | 来源:发表于2019-04-17 17:46 被阅读0次

    同步和P-V操作

    • 同步和互斥的概念
    • P-V操作的概念
    • P-V操作解决互斥问题
    • P-V操作解决同步问题
    • 经典同步问题

    4.5.1 同步和互斥的概念

    1. 进程的互斥关系

    • 多个进程由于共享了独占性资源,必须协调各进程对资源的存取顺序:确保没有任何两个或以上的进程同时进行存取操作
    • 互斥和资源的共享有关
    • 资源:临界资源
    • 存取操作区域:临界区

    2. 进程的同步关系

    • 若干合作进程为了完成一个共同的任务,需要相互协调运行步伐:一个进程开始某个操作之前必须要求另一个进程已经完成某个操作,否则前面只能等待。

    4.5.2 P-V操作概念

    1. 信号灯的概念
      信号灯是一种桌有成效的同步机制。
      进程在运行过程中受信号灯控制,并能改变信号灯状态
    • 进程受控制:信号灯的状态可以阻塞或唤醒
    • 改变信号灯:信号灯的状态可以被进程改变

    信号灯的数据结构

    • 信号灯变量定义为一个二元矢量(S,q)
    • S:整数,初值非负(S又称为信号量)
    • q:PCB队列,初值为空
    struct SEMAPHORE
    {
      int S;  //整数,初值非负
      pointer_PCB q;
    }
    

    两个操作

    • P操作(函数或过程,P(S,q))
      • S-1
      • 若差大于或等于0,该进程继续
      • 若差小于0,则该进程阻塞并加入到队列q中,并转调度函数
    P(S,q){
      S=S-1;
      if(S<0){
        Insert(Caller,q);
        Block(Caller);
        转调度函数;
      }
    }
    
    • V操作(函数或过程,V(S,q))
      • S值加1
      • 若和大于零,该进程继续
      • 若和小于或等于零,该进程继续同时从q中唤醒一个进程
    V(S,q){
      S=S+1;
      if(S<0){
        Remove(q,pid); //pid:进程ID
        Wakeup(pid);
      }
    }
    

    4.5.3 P-V操作解决互斥问题

    实质是实现对临界区的互斥访问,允许最多1个进程处于临界区。
    应用进程:

    • 进入临界区之前先执行P操作
    • 离开临界区之后再执行V操作


      image.png

    P-V操作解决同步问题

    同步机制实质:

    • 运行条件不满足时,能让进程暂停
    • 运行条件满足时,能让进程立即继续

    P-V操作应用于进程同步的基本思路

    • 暂停当前进程:在关键操作之前执行P操作
      • 必要时可暂停
    • 继续进程:在关键操作之后执行V操作
      • 必要时唤醒合作进程
    • 定义有意义的信号量S,并设置合适的初值
      • 信号量能明确地表示运行条件

    经典同步问题

    相关文章

      网友评论

          本文标题:同步和互斥

          本文链接:https://www.haomeiwen.com/subject/dtnnwqtx.html