Tech

Diary

Lecture

About Me

개발중

동시성 제어(lock)

JeongSeulho

2025년 01월 16일

준비중...
클립보드로 복사

lock

lock이라는 개념을 도입하여 동시성 제어를 구현하는 방법

write lock

  • 데이터를 쓰려면 먼저 쓰려는 데이터에 대해 write lock을 획득해야 함
  • write lock를 가지고 있는는 동안 다른 트랜잭션이 해당 데이터를 쓰지 못하도록 함

read lock

  • 데이터를 읽으려면 먼저 읽으려는 데이터에 대해 read lock을 획득해야 함
  • read lock를 가지고 있는 동안 다른 트랜잭션이 해당 데이터를 쓰지 못하지만, 읽을 수는 있음

read lock, write lock 조합

  • lock사용 예시시

Image

  • read lock, write lock 조합

Image

lock을 사용하여도 일어나는 이상 현상

  • 아래 예시의 serial schedule #1t1 => t2 순서로 실행되었을 때 결과가
    • x 300
    • y 500
  • serial schedule #2t2 => t1 순서로 실행되었을 때 결과가
    • x 400
    • y 300
  • 하지만 lock을 사용한 임의의 순서에 schedule 결과는
    • x 300
    • y 300
  • 즉, lock을 사용하여도 non-serial schedule가 발생할 수 있음

Image

2PL protocol(Two-Phase Locking Protocol)

  • 위의 문제를 해결하는 방법법
  • 모든 lock operation이 최초의 unlock operation 보다 먼저 수행되어야 함.
  • serializability를 보장함

Image

  • Expanding phase : lock을 취득하고 반환하지 않는 phase
  • Shrinking phase : lock을 반환하고(unlock) 취득하지 않는 phase

2PL protocol에서는 OS의 데드락과 같은 문제가 발생할 수 있음
해결 방법 또한 OS의 데드락과 동일

다양한 종류의 2PL protocol

  • 2PL protocol은 세부적인 방식에 따라 여러 종류가 있음
  • 다음 예시를 기준으로 설명

Image

conservative 2PL protocol

  • 필요한 모든 lock을 취득하고 트랜잭션 진행
  • deadlock free
  • 모든 lock을 취득하는 것 자체가 실용적이지 않음음

Image

strict 2PL protocol

  • strict schedule을 보장하는 방법(recoverability 보장)
  • write lock을 커밋, 롤백 할 때 반환환

Image

strong strict 2PL protocol

  • strict 2PL와 동일
  • 추가로 read lock 또한 커밋, 롤백 할 때 반환함

Image