경쟁 상태

경쟁 상태(Race condition)은 여러 프로세스가 공유 자원에 동시에 접근함에 따라 일어나는 예상치 않은 이상이나 상태를 의미한다.

공유 메모리상에 있는 변수를 여러 프로세스가 증가시키는 상황을 예로 들 수 있다.

  1. P1이 공유 변수 v의 값 1을 읽는다.
  2. 직후 P2가 v의 값 1을 읽는다.
  3. 이어서 P1이 v의 값 1에 1을 더해 2를 쓴다.
  4. P2도 v의 값 1에 1을 더해 2를 쓴다.

경쟁 상태를 일으키는 코드 영역을 임계 구역(Critical section)이라고 한다.

이 문서를 인용한 문서

  • 동시성 프로그래밍
  • 뮤텍스
    • 뮤텍스(MUTEX)는 상호배제(Mutual exclusion)의 약자로, 경쟁 상태을 실행할 수 있는 프로세스 수를 1개로 제한하는 동기 처리 기법을 의미한다.

  • 세마포어
    • *cnt += 1; // 락을 획득할 수 있으면 카운터를 증가하고 임계 구역으로 진입한다.

  • Readers-writer 락
    • RW 락은 경쟁 상태가 발생하는 이유는 쓰기 연산 때문이며, 쓰기만 배타적으로 수행하면 문제가 발생하지 않는다는 관찰에 기반한다.