• 进程的经典同步问题


    P、V操作描述简单同步

    设同步信号量empty,含义为缓冲单元为空,初值为1
    设同步信号量full,含义为缓冲单元为满,初值为0

    输入进程:
    申请空缓冲单元; P(empty);
    输入数据到缓冲单元; 输入数据到缓冲单元;
    释放满缓冲单元; V(full)

    计算进程
    申请满缓冲单元; P(full)
    从缓冲单元取数据; 从缓冲单元取数据
    释放空缓冲单元; V(empty);

    同步:每一个同步信号量P、V操作成对出现在不同的进程代码中

    经典同步问题

    生产者消费者问题

    P、V操作描述进程同步互斥问题步骤:

    • 分析进程同步互斥关系;
    • 设响应同步互斥信号量;
    • 用P、V操作描述进程活动。

    描述了一组生产者向一组消费者提供产品(数据),它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取出产品消费,生产者和消费者互斥使用整个缓冲池。

    分析:

    • 只要缓冲区未满,生产者就可把产品送入缓冲区,只要缓冲区未空,消费者便可从缓冲区取走产品并消耗它。
    • 仅当缓冲区满时,生产者被阻塞,类似地,缓冲区空时,消费者被阻塞。

    设置两个同步信号量:empty:表示空缓冲单元的数目,初值为缓冲区的大小n;
    full:表示满缓冲单元(即产品)的数目,初值为0;
    设置互斥信号量mutex:表示整个缓冲池,初值为1。
    生产者进程Pi(i=1,2,……,m)

    总结

    • 两个P操作不可用颠倒,如生产者进程中如颠倒,当缓冲区都满时会引起死锁,消费者进程如颠倒,当缓冲区都空时会引起死锁;两个V操作可以颠倒,只是影响到释放缓冲区的顺序。
    • 互斥操作,P、V操作成对出现在同一进程代码中。
    • 同步操作,P、V操作成对出现在不同进程代码中。
  • 相关阅读:
    py笔记之循环结构
    PY学习记录#5
    PY学习记录#4
    py笔记之选择结构
    PY学习记录#3
    分享一个可以随时随地写代码的工具
    PY学习记录#2
    日记啊
    Tarjan学习笔记
    Docker commands
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/12481918.html
Copyright © 2020-2023  润新知