操作系统几个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操作写出能同步执行的程序。
阅览室进出问题
有一阅览室,共有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); //从阅览室出来以后,空出一个座位
}
}