본문 바로가기
IT 지식

경쟁상태(Race Condition)에 대해

by 달팽이 "@... 2021. 12. 16.

 

정의

경쟁상태(Race Condition)는 프로세스나 스레드가 데이터에 어떤 순서로 접근하냐에 따라 결과값이 달라질 수 있는 상태를 말한다. 버그를 초래할 수 있으므로 동기화를 통해 경쟁상태를 해결해야 한다.


경쟁상태 해결을 위한 조건
  • 상호배제(Mutual Exclusion)
    프로세스나 스레드가 임계영역(Critical Section)에 접근한 상태라면 다른 프로세스나 스레드는 임계영역에 접근할 수 없어야 한다는 조건

  • 진행(Progress)
    임계영역에 접근해있는 프로세스나 스레드가 없고 임계영역 밖에서 대기하고 있는 프로세스나 스레드가 있다면 순서에 맞는 프로세스나 스레드가 임계영역에 접근할 수 있도록 선택한다는 조건

  • 한정대기(Bounded Waiting)
    임계구역에 접근하기만을 기다리는 기아(Starvation)를 방지하기 위해 한번 임계구역에 접근한 스레드나 프로세스는 다시 임계구역에 접근할 때 제한을 두는 조건

경쟁상태를 해결하기 위한 알고리즘

뮤텍스(Mutex)

  • Mutual Exclusion의 준말로 상호배제를 뜻한다.
  • Mutex에서는 Lock과 Unlock을 사용하여 임계영역에 접근하는 프로세스나 스레드의 갯수를 1개로 제한하여 경쟁상태를 해소하는 알고리즘이다.
  • 공유 자원을 점유하고 있는 대상이 Lock을 할 수 있는 권한을 가지고 Lock을 수행해 다른 프로세스나 스레드를 임계영역에 접근하지 못하게 만든다. 대기중인 프로세스와 스레드는 공유자원을 접근중인 프로세스나 스레드가 Unlock을 수행하면 공유자원에 접근이 가능하다.

 

세마포어(Semaphore)

  • 뮤텍스와 가장 두드러지는 차이점은 동기화 대상의 갯수이다.
  • 뮤텍스는 임계영역에 한번에 오직 1개의 프로세스나 스레드만이 접근할 수 있지만 세마포어는 접근 가능한 프로세스나 스레드의 갯수를 지정할 수 있다.
  • 세마포어의 구조
    semInit: 세마포어를 음수가 아닌 값으로 초기화 한다.
    semWait: 세마포어 값을 감소시킨다/세마포어 값이 음수일 경우 호출한 프로세스나 스레드는 대기시킨다.
    semSignal: 세마포어 값을 증가시킨다/세마포어 값이 음수가 아닐 경우 semWait 연산에 의해 대기중인 프로세스나 스레드를 준비시킨다.

 

'IT 지식' 카테고리의 다른 글

데이터베이스 정규화(Normalization)란?  (0) 2021.12.16
프로세스(Process)와 스레드(Thread)의 차이  (0) 2021.12.13
HTTP와 HTTPS의 차이  (0) 2021.12.10