📜  门| GATE-CS-2014-(Set-3) |第 65 题(1)

📅  最后修改于: 2023-12-03 15:28:44.002000             🧑  作者: Mango

题目:门| GATE-CS-2014-(Set-3) |第 65 题

题目描述

有 n 个进程和一组互斥的资源,其中进程 i 需要获得 ki 个资源。

有 n 个门,其中门 i 保护着资源集合 Si

门可以同时授予一个或多个进程 Si,但不能同时授予集合中所有的资源。

门 i 的开启和关闭只能由一个特别的仲裁进程进行。仲裁者进程的任务是按照这样的顺序授予门:

  1. 按照请求资源的进程的编号升序排列。

  2. 如果有相等的编号,则按照数字的大小升序排列。

  3. 对于每个请求,按照门的编号升序排列。

  4. 如果有相等的编号,那么任何顺序都可以。

有一个简单的测试用例,假设 n=3,k1=2,k2=2,k3=3。门1保护资源s1,门2保护资源s2,门3保护资源s3。进程1需要访问门1和门2。进程2需要访问门2和门3。进程3需要访问门3。

  1. 进程1和进程2均申请对门2的访问。进程1应该比进程2先获得S2, 在执行之前进程1不会被放行。
  2. 进程3请求门3时,进程1和进程2仍然持有它们需要的资源。进程3应该在进程1和进程2之后获得S3

编写一个仲裁进程来模拟这种联合排队策略。仲裁进程首先打印请求,然后打印允许进入门的进程。

输入格式

程序输入的第一行是进程总数 n。

接下来的行中,每行包含一个正整数 ki,表示需要获得的资源数量,以及一组连续的正整数,表示资源集合 Si

输出格式

对于每个请求,打印一个进度报告。

对于每个允许通过的进程,打印一条消息,显示该进程正在门的前面等待排队或已经进入了门。

示例
输入

3 2 1 2 2 2 3 3 3 4 5

输出
Request by P1 to access S1, S2
Request by P2 to access S2, S3
Request by P3 to access S3
P1, P2 are granted access to S2
P3 is granted access to S3
建议

为仲裁进程编写一个开关门命令来分配资源。门可以有两种状态(开启和关闭,或“允许访问”和“禁止访问”,或“低电位”和“高电位”)。还可以为每个门编写一个计数器,记录当前持有该门的进程数。