잠금 관리자

면접 대비

시간 제한1초메모리 제한128 MB

요약
들어온 순서대로 S 또는 X 잠금 요청을 처리한다. 이미 승인된 잠금과 충돌하지 않으면 승인하고, 충돌하면 거부하며 그 트랜잭션은 차단되어 이후 요청은 무시한다.
난이도

보통10점 중 4점

유형
해시맵, 시뮬레이션, 구현, 배열
정답자
아직 제출이 없습니다

문제

데이터베이스 관리 시스템(DBMS)의 잠금 관리자(Lock Manager) 를 구현한다.

잠금(lock)은 여러 트랜잭션이 같은 데이터 항목에 동시에 접근하는 것을 제어한다. 이 DBMS는 단순하여 공유(Shared, S) 와 배타(Exclusive, X) 두 가지 잠금 모드만 사용한다. 각 잠금 요청은 잠금 모드(S 또는 X), 트랜잭션 번호, 데이터 항목 번호로 이루어진다. 같은 데이터 항목에 대해서도 서로 충돌하지 않는 한 여러 개의 잠금을 동시에 허가할 수 있다.

같은 데이터 항목에 대한 두 잠금은 다음 조건을 모두 만족할 때 충돌한다.

  • 서로 다른 트랜잭션에 속하고,
  • 둘 중 적어도 하나가 배타(X) 모드이다.

아주 단순한 잠금 관리자를 작성한다. 어떤 잠금 요청은 해당 데이터 항목에 대해 이미 허가된 잠금들과 충돌하지 않을 때에만 허가된다. 한 번 허가된 잠금은 절대 해제되거나 변경되지 않는다. 어떤 요청이 이전에 허가된 잠금과 충돌하여 거부되면, 그 요청을 보낸 트랜잭션은 차단(blocked) 되고, 그 트랜잭션이 이후에 보내는 모든 요청은 무시된다.

입력

입력은 여러 개의 잠금 요청으로 이루어지며, 각 요청은 한 줄에 하나씩 주어진다. 각 요청의 형식은 다음과 같다.

MODE TRID ITEM

  • MODE는 요청하는 잠금 모드를 나타내는 대문자 한 글자로, S 또는 X이다.
  • TRID는 트랜잭션 번호, ITEM은 데이터 항목 번호이다. 둘 다 00보다 큰 정수이며, 각각 최대 99자리 십진수이다.

요청은 최소 11개, 최대 1000010000개이다. 마지막 요청 다음 줄에는 문자 # 하나만 있는 줄이 온다.

출력

입력의 모든 요청을 순서대로 처리한다. 각 요청마다 그 요청에 대한 응답을 한 줄에 하나씩 출력한다. 가능한 응답은 다음과 같다.

  • GRANTED — 이 요청이 이미 허가된 어떤 잠금과도 충돌하지 않아 허가된다.
  • DENIED — 이 요청이 이미 허가된 어떤 잠금과 충돌하여 거부되며, 이로 인해 요청한 트랜잭션이 차단된다.
  • IGNORED — 요청한 트랜잭션이 이 요청 이전의 어떤 요청에서 이미 차단되었다.

응답은 위와 정확히 같은 형태의 대문자로 출력한다. 마지막 응답 뒤에는 임의 개수의 빈 줄이 올 수 있다.

예제5

  1. 예제 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
    #
    
    예상 출력
    GRANTED
    GRANTED
    DENIED
    GRANTED
    GRANTED
    GRANTED
    GRANTED
    GRANTED
    DENIED
    DENIED
    GRANTED
    GRANTED
    IGNORED
    DENIED
    GRANTED
    IGNORED
    
  2. 예제 2

    입력
    S 1 1
    #
    
    예상 출력
    GRANTED
    
  3. 예제 3

    입력
    X 1 5
    S 2 5
    #
    
    예상 출력
    GRANTED
    DENIED
    
  4. 예제 4

    입력
    S 1 1
    X 1 1
    S 1 1
    #
    
    예상 출력
    GRANTED
    GRANTED
    GRANTED
    
  5. 예제 5

    입력
    S 1 1
    S 2 1
    X 3 1
    #
    
    예상 출력
    GRANTED
    GRANTED
    DENIED