1 / 55
文档名称:

IPC经典问题761资料讲解.ppt

格式:ppt   大小:322KB   页数:55页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

IPC经典问题761资料讲解.ppt

上传人:yuzongjuan7806 2020/7/26 文件大小:322 KB

下载得到文件列表

IPC经典问题761资料讲解.ppt

文档介绍

文档介绍:IPC经典问题(1)读者写者问题问题描述:有两组并发进程:读者和写者,共享一组数据区要求:允许多个读者同时执行读操作不允许读者、写者同时操作不允许多个写者同时操作第一类:读者优先如果读者到:1)无读者、写者,新读者可以读2)有写者等,但有其它读者正在读,则新读者也可以读3)有写者写,新读者等如果写者到:1)无读者,新写者可以写2)有读者,新写者等待3)有其它写者,新写者等待第一类读者写者问题的解法读者:while(true){P(mutex);readcount++;if(readcount==1)P(w);V(mutex);读P(mutex);readcount--;if(readcount==0)V(w);V(mutex);};写者:while(true){P(w);写V(w);};(2)哲学家就餐问题问题描述:有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子每个哲学家的行为是思考,感到饥饿,然后吃通心粉为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子哲学家就餐问题解法(1)#defineN5voidphilosopher(inti){while(true){思考;取fork[i];取fork[(i+1)%5];进食;放fork[i];放fork[(i+1)%5];}}为防止死锁发生可采取的措施:最多允许4个哲学家同时坐在桌子周围仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子()给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,并且一次拿到两只筷子,否则不拿哲学家就餐问题解法(2)#defineN5#HINKING0#defineHUNGRY1#defineEATING2#typedefintsemaphore;intstate[N];semaphoremutex=1;semaphores[N];voidtest(inti){if(state[i]==HUNGRY)&&(state[(i-1)%5]!=EATING)&&(state[(i+1)%5]!=EATING){state[i]=EATING;V(&s[i]);}}voidphilosopher(inti){while(true){思考;P(&mutex);state[i]=HUNGRY;test(i);V(&mutex);P(&s[i]);拿左筷子;拿右筷子;进食;放左筷子;放右筷子;P(&mutex)state[i]=THINKING;test([i-1]%5);test([i+1]%5);V(&mutex);}}state[i]=THINKINGs[i]=0