操作系统同步互斥练习题 本文总结了操作系统同步互斥的三个练习题,涉及了信号量的使用、进程同步和互斥的实现。 一、公共汽车同步问题 在公共汽车上,司机和售票员的活动分别是:司机的活动是启动车辆、正常行车、到站停车;售票员的活动是关车门、 售票、开车门。在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?可以使用信号量 S 和 C 实现它们的同步,初值为 S=0、C=0。 司机的活动可以用以下代码实现: L1:正常行车 P(S) V(S) 售票员的活动可以用以下代码实现: L2:售票到站停车 P(C) V(C) 二、桌子上水果同步问题 桌子上有一个空盘子,允许存放一只水果,爸爸可以向盘中放苹果,妈妈向盘子中放橘子,女儿专门吃盘子中的苹果,儿子专门吃盘子中的橘子。规定当盘子空的时候一次只能放一只水果。可以使用信号量 S, S1, S2 实现他们之间的同步与互斥,初值为 S=1, S1=0, S2=0。 Process Father: Begin: L1:P(S); Put Apple; V(S1); GO TO L1; End: Process Mother: Begin: L2:P(S); Put Orange; V(S2); GO TO L2; End: Process Son: Begin: L3:P(S2); Get Orange; V(S); GO TO L1; End: Process Daughter: Begin: L4:P(S1); Get Apple; V(S); GO TO L4; End: Cobegin: Process Father, Process Mother, Process Son, Process Daughter CoEnd; 三、写者优先的“读者――写者”问题 在这个问题中,我们需要实现写者优先于读者的“读者――写者”问题。我们可以使用信号量 wmutex, S, S2, mutex1, mutex2, readcount, writecount 实现这个问题。 读者过程: Repeat Wait(S2); Wait(S); Wait(mutex1); If readcount=0 then Wait(wmutex); readcount++; Signal(mutex1); Signal(S); Signal(S2); reading…; Wait(mutex1); readcount--; If readcount=0 then Signal(wmutex); Signal(mutex1); Until false; 写者过程: Repeat Wait(mutex2); If writecount=0 then Wait(S); writecount++; Signal(mutex2); Wait(wmutex); writing…; Signal(wmutex); Wait(mutex2); writecount--; If writecount=0 then Signal(S); Signal(mutex2); Until true; 本文总结了三个操作系统同步互斥的练习题,涉及了信号量的使用、进程同步和互斥的实现。
剩余19页未读,继续阅读
- 粉丝: 381
- 资源: 8万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助