利用整型信号量解决理发师问题[定稿]_进程同步理发师问题
利用整型信号量解决理发师问题[定稿]由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“进程同步理发师问题”。
利用整型信号量解决理发师问题
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);//表明水已经被喝了一桶