利用整型信号量解决理发师问题[定稿]_进程同步理发师问题

2020-02-27 其他范文 下载本文

利用整型信号量解决理发师问题[定稿]由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“进程同步理发师问题”。

利用整型信号量解决理发师问题

int waiting=0;//等候理发的人数,临界资源

semaphore customers=0,barbers=0;//两个信号量,顾客和理发师

semaphore mutex=1;//此信号量是为操作临界资源waiting而设的barber()//理发师进程

{

While(1)

{

}

}

customer()//顾客进程

{

P(mutex);//开始操作临界资源

if(waiting

{

} waiting++;//等候的人数加1 V(customers);//来了一个顾客 V(mutex);//开放临界资源 P(barbers);//等理发师来理发,之后表明理发师忙碌 顾客接受理发师理发();P(customers);//是否有顾客,若没有则理发师睡觉 P(mutex);//当有顾客时,执行此语句,开始操作临界资源waiting waiting--;//等候的人数减1 V(barbers);//表明理发师空闲,可以理发了 V(mutex);//开放临界资源 理发师为顾客理发();

else//若没有空座,直接走人,并开放临界资源

V(mutex);

}

利用整型信号量解决和尚打水问题

semaphore mutex1=1,mutex2=1;//分别为操作“井”和“水缸”这两个临界资源的信号量 semaphore count=3;//操作临界资源“水桶”的信号量,表明可用水桶的数目

semaphore empty=10,full=0;//水缸满和空的信号量

young()//小和尚进程

{

while(1)

{

P(empty);//判断水缸是否可装水 P(count);//是否有可用的水桶,申请使用一个水桶 P(mutex1);//操作临界资源“井” 小和尚从井中取水();

} V(mutex1);//开放“井” P(mutex2);//操作临界资源“水缸” 小和尚把水倒入水缸();V(mutex2);//开放“水缸” V(count);//归还一个水桶 V(full);//表明水缸中已经添加了一桶水

}

old()//老和尚进程 {

while(1)

{

}

} P(full);//判断水缸中是否有水可喝 P(mutex2);//操作临界资源“水缸” 老和尚从水缸中取水();V(mutex2);//开放“水缸” V(empty);//表明水已经被喝了一桶

《利用整型信号量解决理发师问题[定稿].docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
利用整型信号量解决理发师问题[定稿]
点击下载文档
相关专题 进程同步理发师问题 信号量 定稿 理发师 进程同步理发师问题 信号量 定稿 理发师
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文