信号量与进程同步:民航售票、围棋分拣与车站购票系统

需积分: 28 7 下载量 102 浏览量 更新于2024-09-07 1 收藏 63KB DOC 举报
操作系统PV练习题主要探讨了进程间通信和同步控制的两个关键概念:信号量(Semaphore)及其在多进程环境中的应用。信号量是一种同步工具,它用于管理共享资源的访问权限,通过改变其值来协调不同进程对资源的请求和释放。 1. **民航售票系统中的互斥关系**: 在这个场景中,多个售票处进程P1-Pn需要并发地访问公共数据区的票数信息。为了确保只有一个进程可以修改票数,防止竞态条件,使用了一个信号量semaphore。当semaphore值为1时,表示当前没有进程正在操作票数,其他进程可以请求(Wait)并尝试减小票数;如果票数减少后大于0,进程完成操作后会唤醒其他等待者(Signal)。这实现了进程间的互斥,即一次只有一个进程能读写特定的票数Rk。 2. **围棋自动分拣系统的并发控制**: 两个并发的进程A和B负责拣选不同颜色的棋子,需要避免同时进行。通过一个信号量s来控制,当一个进程(如A)取得信号量(Wait(s))后,可以进行拣选,结束后释放信号(Signal(s)),接着下一个进程(B)才能获取信号量。这种设计保证了进程的交替执行,避免了冲突。 3. **车站售票厅的并发控制**: 20个售票窗口需要限制同时进入的购票者数量。信号量s的初始值为20,表示最多允许20个购票者进入。当售票厅人数小于20时,等待的购票者可以通过(Wait(s))进入,购票后(退出)再(Signal(s))通知后续者。这保持了购票流程的有序进行,确保公平性。 4. **双向车辆过桥的信号量应用**: 对于单车道简易桥,需要管理四个信号量:S(互斥使用)、Scounteast(东向西车辆计数)、Scountwest(西向东车辆计数)和Scount4(总车辆计数)。每个方向的车辆计数器互斥使用,确保任何时候只有一个方向的车辆在桥上。当车流量超过最大负荷(4辆)时,需要等待,使用wait/signal操作确保安全过桥。 这些练习题展示了如何在实际场景中使用信号量进行进程同步和互斥,以及如何有效地管理共享资源,确保并发执行的正确性和效率。理解并熟练运用PV操作是操作系统理论和实践的重要部分,有助于构建健壮的多线程和分布式系统。