某车站售票厅,有20个售票窗口,若把一个购票者看作一个进程,请回答下列问题. 1.用PV操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值以及信号量各种取值的含义.

某车站售票厅,有20个售票窗口,若把一个购票者看作一个进程,请回答下列问题. 1.用PV操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值以及信号量各种取值的含义. (1)定义信号量为S,初始值为( ) 2.若欲购票者最多为n个人,写出信号量可能的变化范围. S的最大值为( ) S的最小值为( )
(1)定义一信号量s,初始值为20。
S>0S的值表示可继续进入售票厅的人数S=0表示售票厅中已有20名顾客( 购票者)S<0|S| 的值为等待进入售票厅的人数(2).上框为wait(S)下框为signal(S)(3)S的最大值为20s的最小值为20-n注:信号量的符号可不同(如写成t),但使用时应一-致(即上述的s全应改成t)。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
(1) 用PV操作管理这些并发进程,可以定义两个信号量:mutex和tickets。 - mutex:初始值为1,表示售票厅的互斥信号量。当一个购票者进入售票厅,需要先获取mutex信号量的许可,进入售票厅进行购票,购票完成后再释放mutex信号量的许可,以便其他购票者进入售票厅。 - tickets:初始值为20,表示售票厅的剩余票数。当一个购票者进入售票厅,需要判断剩余票数是否大于0,如果大于0,则剩余票数减1,购票成功;如果等于0,则需要等待其他购票者购买完成后再进入售票厅。 (2) 根据所定义信号量,可以写出以下代码来并发执行购票进程: ``` // 定义信号量 Semaphore mutex = new Semaphore(1); // 互斥信号量 Semaphore tickets = new Semaphore(20); // 剩余票数 // 购票进程 public void purchaseTicket() { while (true) { // 等待剩余票数信号量的许可 tickets.acquire(); // 等待互斥信号量的许可 mutex.acquire(); // 在售票厅内进行购票操作 System.out.println("进入售票厅购票"); // 释放互斥信号量的许可 mutex.release(); // 购票完成,释放剩余票数信号量的许可 tickets.release(); // 离开售票厅 System.out.println("离开售票厅"); } } ``` 该代码中,当购票者进入售票厅,需要先获取剩余票数信号量的许可,判断当前是否有票可以购买。如果有票,则获取互斥信号量的许可,进入售票厅进行购票操作,购票完成后释放互斥信号量的许可和剩余票数信号量的许可,以便其他购票者进入售票厅。如果没有票

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值