美文网首页
PV操作(生产者消费者)

PV操作(生产者消费者)

作者: 小幸运Q | 来源:发表于2019-02-23 19:19 被阅读0次

    进程的同步机制:

    信号量S:尚未占用的资源数量

    // 申请资源
    P(S){
        S=S-1;
        if(S<0){
            // 调用该P操作的进程阻塞,插入阻塞队列。
        }
    }
    

    // 释放资源
    V(S){
        S=S+1;
        if(S<=0){
            // 从等待信号量S的阻塞队列中唤醒一个进程
        }
    }
    

    1. 进程互斥访问count然后++:
    count=0;
    S semaphore;     // 公用信号量
    S=1;
    Process P1{
      P(S);
      R1=count;
      R1=R1+1;
      count=R1;
      V(S);
    }
    Process P2{
      P(S);
      R2=count;
      R2=R2+1;
      count=R2;
      V(S);
    }
    

    1. 生产者消费者问题

    能不能先mutex再S1,S2?
    不能,当生产者已经将缓冲区充满,消费者还没消费,则mutex上锁后阻塞在S1,然后消费者想mutex但是被阻塞,最后产生死锁。

    mutex=1 同步信号量用于缓冲区互斥访问
    S1=n 生产者进程(n为缓冲区大小) 
    S2=0 消费者进程
    
    // 生产者
    while(true){
      P(S1);
      P(mutex);
      // 放入一件物品
      V(mutex);
      V(S2);
    }
    // 消费者
    while(true){
      P(S2);
      P(mutex);
      // 拿出一件物品
      V(mutex);
      V(S1);
    }
    

    1. 售票员与司机问题
    image.png

    相关文章

      网友评论

          本文标题:PV操作(生产者消费者)

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