• 操作系统之经典同步问题的理解


    1. 哲学家就餐问题

    资源:5个筷子

    进程:5个哲学家

    进程使用资源的方式:每个哲学家在吃饭时要用2个筷子,吃饭结束后放下

    怎样同步:

    A 设置一个资源为4的房间信号量,即每次只允许4个哲学家进入房间

    B 设置要求:一个哲学家要么不拿筷子,要么两根筷子都拿起来,则只有在判断两边没有吃饭的时候自己才吃

    2. 读者写者问题

    资源:一个文件

    进程:多个读者进程和多个写者进程

    进程使用资源的方式:读者进程可以同时访问文件,写者进程只能单独访问文件(不能有其他读或者写)

    怎样同步:

    A 读者优先:除了第一个读者要验证是否有写者,其他读者直接进来就可以;所有读者都进完了再唤醒写者;

    B 写者优先:直接修改读者的代码;这时要排两队,信号量1的队:给不是第一个的读者排的队,如果第一个读者没能读,那么他们进2队的机会都没有;信号量2的队:给第一个写者和第一个读者准备的队;不是第一个写者根本不用排队,直接进入文件临界区;

    3. 消费者问题

    资源:有限数目的消费(生产)空间;一个能生产或者消费的区域;

    进程:多个消费者和多个生产者

    进程使用资源的方式:消费者只有当有产品的时候才消费,生产者只有当有空间的时候才生产;消费者消费后空间增大,生产者生产后产品增多;区域一次只进一个人

    怎样同步:

    A 消费者根据产品数目排队,生产者根据空间排队;每次完成之后增加空间/产品

    代码参考:
    https://www.cnblogs.com/sinkinben/p/10713536.html

  • 相关阅读:
    BZOJ4223 : Tourists
    BZOJ3565 : [SHOI2014]超能粒子炮
    BZOJ3499 : PA2009 Quasi-template
    BZOJ3490 : Pa2011 Laser Pool
    BZOJ2828 : 火柴游戏
    BZOJ3070 : [Pa2011]Prime prime power 质数的质数次方
    BZOJ2138 : stone
    BZOJ2167 : 公交车站
    BZOJ1290 : [Ctsc2009]序列变换
    Ural2110 : Remove or Maximize
  • 原文地址:https://www.cnblogs.com/Plorde/p/12321056.html
Copyright © 2020-2023  润新知