《IPC经典问题》PPT课件

《IPC经典问题》PPT课件

ID:39356674

大小:259.84 KB

页数:55页

时间:2019-07-01

《IPC经典问题》PPT课件_第1页
《IPC经典问题》PPT课件_第2页
《IPC经典问题》PPT课件_第3页
《IPC经典问题》PPT课件_第4页
《IPC经典问题》PPT课件_第5页
资源描述:

《《IPC经典问题》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、IPC经典问题(1)读者写者问题问题描述:有两组并发进程:读者和写者,共享一组数据区要求:允许多个读者同时执行读操作不允许读者、写者同时操作不允许多个写者同时操作第一类:读者优先如果读者到:1)无读者、写者,新读者可以读2)有写者等,但有其它读者正在读,则新读者也可以读3)有写者写,新读者等如果写者到:1)无读者,新写者可以写2)有读者,新写者等待3)有其它写者,新写者等待第一类读者写者问题的解法读者:while(true){P(mutex);readcount++;if(readcount==1)P(w);V(mutex);

2、读P(mutex);readcount--;if(readcount==0)V(w);V(mutex);};写者:while(true){P(w);写V(w);};第一类读者写者问题的解法 (一般信号量集)读者:Swait(wmutex,1,1;rcount,R,0);写;Ssignal(wmutex,1);写者:Swait(rcount,1,1;wmutex,1,0);写;Ssignal(rcount,1);增加一个限制条件:同时读的“读者”最多R个Wmutex表示“允许写”,初值是1Rcount表示“允许读者数目”,初值为

3、R(2)哲学家就餐问题问题描述:有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子每个哲学家的行为是思考,感到饥饿,然后吃通心粉为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子哲学家就餐问题解法(1)#defineN5voidphilosopher(inti){while(true){思考;取fork[i];取fork[(i+1)%5];进食;放fork[i];放fork[(i+1)%5];}}为防止死锁发生可采取的措施:最多允许4个哲学家同时坐在桌

4、子周围仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子()给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,并且一次拿到两只筷子,否则不拿哲学家就餐问题解法(2)#defineN5#defineTHINKING0#defineHUNGRY1#defineEATING2#typedefintsemaphore;intstate[N];semaphoremutex=1;semaphores[N];voidtest(inti){if(state[i]

5、==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)

6、;}}state[i]=THINKINGs[i]=05.进程的同步机制──管程管程的提出采用PV同步机制来编写并发程序,对于共享变量及信号量变量的操作将被分散于各个进程中缺点:(1)易读性差,因为要了解对于一组共享变量及信号量的操作是否正确,则必须通读整个系统或者并发程序(2)不利于修改和维护,因为程序的局部性很差,所以任一组变量或一段代码的修改都可能影响全局(3)正确性难以保证,因为操作系统或并发程序通常很大,要保证这样一个复杂的系统没有逻辑错误是很难的Dijkstra(1971):“秘书”进程Hansen和Hoare(19

7、73):管程进程的同步机制──管程(续1)管程:一种同步机制(管程-类程-进程)管程定义:指关于共享资源的数据及在其上操作的一组过程或共享数据结构及其规定的所有操作系统按资源管理的观点分解成若干模块,用数据表示抽象系统资源,同时分析了共享资源和专用资源在管理上的差别,按不同的管理方式定义模块的类型和结构,使同步操作相对集中,从而增加了模块的相对独立性进程的同步机制──管程(续2)管程的形式TYPEmonitor_name=MONITOR;共享变量说明define本管程内所定义、本管程外可调用的过程(函数)名字表use本管程外所

8、定义、本管程内将调用的过程(函数)名字表PROCEDURE过程名(形参表);过程局部变量说明;BEGIN语句序列;END;......FUNCTION函数名(形参表):值类型;函数局部变量说明;BEGIN语句序列;END;......BEGIN共享变量初始化语句序列;END;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。