• 熟悉开机后登陆进入Linux系统和退出系统的过程。


    问题分析
    1. 分析关系
    同步关系:

    互斥关系:


    2. 整理思路
    同步关系的P、V操作:

    互斥关系的P、V操作:

    3. 信号量初值设置
    同步信号量:
    信号量full用于记录当前缓冲池中的“满”缓冲区数,初值为0。
    信号量empty用于记录当前缓冲池中的“空”缓冲区数,初值为n。
    互斥信号量:
    信号量mutex作为互斥信号量,用于控制互斥访问缓冲池,互斥信号量初值为1;
    代码
    semaphore mutex=l;                    //临界区互斥信号量
    semaphore einpty=n;                    //空闲缓冲区
    semaphore full=0;                    //缓冲区初始化为空

    producer(){                            //生产者进程
        while(1){
            produce an item in nextp;    //生产数据
            P (empty);(要用什么,P—下)    //获取空缓冲区单元
            P (mutex);(互斥夹紧)            //进入临界区
            add nextp to buffer;(行为)    //将数据放入缓冲区
            V (mutex);(互斥夹紧)            //离开临界区,释放互斥信号量
            V(full);(提供什么,V—下)        //满缓冲区数加1
        }
    }


    consumer(){                            //消费者进程
        while (1){
            P(full);                    //获取满缓冲区单元
            P(mutex);                    //进入临界区
            remove an item from buffer;    //从缓冲区中取出数据
            V(mutex);                    //离开临界区,释放互斥信号量
            V(empty);                    //空缓冲区数加1
            consume the item;            //消费数据
        }
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    同步和互斥的顺序能否调换顺序?

    类比:


    2. 多生产者——消费者问题
    问题描述:桌子上有一个盘子,每次只能向其中放入一个水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,儿子专等吃盘子中的橘子,女儿专等吃盘子中的苹果。只有盘子为空时,爸爸或妈

  • 相关阅读:
    g1垃圾收集器gc的四种日志解释
    2023年终旺季正式拉开帷幕,赛盈分销盘点亚马逊秋季Prime Day热销款式!
    [思维]Tournament Countdown Codeforces1713D
    切比雪夫不等式
    A-Level陆续放榜,这些重要事宜需要关注
    Vue3 readonly 和 shallowReadonly
    力扣(LeetCode)323. 无向图中连通分量的数目(2022.11.20)
    在linux下预览markdown的方法,转换成html和pdf
    【Kubernetes 系列】Kubernetes 创建K8s集群项目
    fanuc机器人IO分配报警信号分配无效
  • 原文地址:https://blog.csdn.net/m0_68036862/article/details/127651743