操作系统几个PV操作算法模型

考前抱佛脚T-T这几题感觉比那几个典型的好理解多了。。看着课本上那几道例题越看越懵。。是我有问题还是书上写着有问题。。下面三个是偶自己写的不懂对不对。。。假装自己写的都对吧XD来不及了

男女共浴问题

问题描述:假设某宿舍楼有一共用浴室,学校颁布规定:当有一个女生正在使用浴室,则其他女生可以进入,但是男生不行,反之亦然。在每个浴室门上有一个滑动指示符号,表示当前处于以下三种可能状态之一:
(1)空 (2)有女生 (3)有男生

semaphore mutex = 1,mutex_man = 1,mutex_woman = 1;
int man_count = 0,woman_count = 0;
    
void Boy(){
    /* 1.跟其他男孩子抢着进浴室 */
    P(mutex_man);
    man_count++;
    if(man_count==1){
        P(mutex);	//跟其他女孩子抢浴室的主权
    }
    V(mutex_man);
    /* 跟其他男孩子抢着进浴室 */
    洗白白ing
    /* 2.洗完澡走人 */
	P(mutex);
    if(man_count==0){	//男孩子们都洗完了,女孩子们就可以进去洗澡了
        V(mutex);
    }
	V(mutex);
    /* 洗完澡走人 */
}

void Girl(){
    /* 1.跟其他女孩子抢着进浴室 */
    P(mutex_woman);
    woman_count++;
    if(woman_count==1){
        P(mutex);	//跟其他男孩子抢浴室的主权
    }
    V(mutex_woman);
    /* 跟其他女孩子抢着进浴室 */
    洗白白ing
    /* 2.洗完澡走人 */
	P(mutex);
    if(woman_count==0){	//女孩子们都洗完了,男孩子们就可以进去洗澡了
        V(mutex);
    }
	V(mutex);
    /* 洗完澡走人 */
}

农民和饭馆交易动物问题

问题描述:有一只铁笼子,每次只能放入一只动物,猎手向笼子里放入老虎,农民向笼子里放入;动物园等待取笼子里的老虎,饭店等待取笼子里的猪。现请用wait和signal操作写出能同步执行的程序。

image-20200709174036690

image-20200709174056721

阅览室进出问题

有一阅览室,共有100个座位。读者进入时必须先在一种登记表上登记,该表为每一座位列一个表目,包括座号和读者姓名。读者离开时要注销掉登记内容。

semaphore mutex = 1;
semaphore s = 100;

void readers(){
    while(true){
        P(s);	//先观察阅览室里边有没有座位,有则进入阅览室
        /* 1.登记并进入阅览室 */
        P(mutex);
        读者在登记表上登记个人信息
        V(mutex);
        /* 登记并进入阅览室 */
        读者开始愉悦地看起了书
        /* 2.注销并退出阅览室 */
        P(mutex);
        读者在登记表上登记个人信息
        V(mutex);
        /* 注销并退出阅览室 */
        V(s);	//从阅览室出来以后,空出一个座位
    }
}
posted @ 2020-07-09 18:01  碎了的冰  阅读(1135)  评论(0编辑  收藏  举报