#P1749. Lock Manager

Lock Manager

本题没有可用的提交语言。

题目描述

你被邀请参与开发一个新的数据库管理系统(DBMS),并负责其中的锁管理器(Lock Manager)。锁用于控制多个事务对数据项的并发访问。该DBMS仅使用共享锁(S)和排他锁(X)。每个锁请求包含锁模式(S或X)、事务标识符(TRID)和数据项标识符(ITEM)。只要不冲突,同一个数据项可以授予多个锁。

两个锁在以下情况下会发生冲突:

  1. 它们属于不同的事务;
  2. 至少有一个是排他锁(X)。

在开发初期,你需要实现一个简单的锁管理器,处理锁请求。如果锁请求与已授予的锁冲突,则拒绝该请求,并且该事务后续的所有请求都会被忽略。锁一旦授予,就不会被释放或修改。

输入格式

输入由若干锁请求组成,每行一个请求,格式如下:

MODE TRID ITEM

其中:

  • MODE 是单个大写字母 SX,表示请求的锁模式;
  • TRID 是事务标识符(正整数,最多9位数字);
  • ITEM 是数据项标识符(正整数,最多9位数字)。

输入至少包含1个请求,最多10000个请求。最后一个请求后跟一行 #,表示输入结束。

输出格式

程序需按顺序处理所有请求,并对每个请求输出一行响应,可能的响应如下:

  • GRANTED:锁请求未冲突,已授予;
  • DENIED:锁请求冲突,已拒绝,事务被阻塞;
  • IGNORED:该事务之前已被阻塞,忽略当前请求。

响应必须全部大写,严格按照示例格式输出。输出末尾可以包含任意数量的空行。

示例输入1

S 1 1
S 2 2
X 10 1
S 6 123456789
S 3 3
X 2 2
S 5 6
S 3 1
S 3 2
X 987654321 123456789
X 1 4
S 6 6
S 3 5
S 2 4
X 4 5
S 2 51
#

示例输出1

GRANTED
GRANTED
DENIED
GRANTED
GRANTED
GRANTED
GRANTED
GRANTED
DENIED
DENIED
GRANTED
GRANTED
IGNORED
DENIED
GRANTED
IGNORED

来源

Northeastern Europe 1999