교착상태(DeadLock)란? - LOG.INFO

배경

본 포스팅에서는 교착상태(DeadLock)에 대해 알아본다.

교착상태(DeadLock)란?

교착상태란 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를 말한다.

DeadLock의 발생 조건

DeadLock에는 아래와 같은 4가지 발생 조건이 존재하며, 아래의 조건 중 하나를 해결함으로써 DeadLock을 해결한다.

  • 상호 배제 (Mutual exclusion)
    • 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다.
  • 점유 대기 (Hold and wait)
    • 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
  • 비선점 (No Preemption)
    • 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
  • 순환 대기 (Circular wait)
    • 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

Race Condition

Race Condition이란 두 개 이상의 프로세스가 공통 자원을 병행적으로 읽거나 쓸 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 달라지는 상황을 말한다.

상호 배제(Mutual exclusion)

상호배제는 각 프로세스가 서로 공용 자원의 사용을 막는 것을 의미한다.

임계 구역(Critical Section)

임계구역이란 각 프로세스에서 공유 데이터를 액세스하는 프로그램 코드 부분

세마포어(Semaphore)와 뮤텍스(Mutex)

  • 세마포어
    • 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 제어하는 것
  • 뮤텍스
    • 공유된 자원의 데이터를 여러 쓰레드가 접근하는 것을 막는 것

꼬리를 물고 물어~

  • InitializingBean & DisposableBean

참고문헌