본문 바로가기
IT/Knowledge

Race condition이란

by 성준하이 2024. 10. 7.
반응형

시작하기 앞서 위키에서 설명하는 Race Condition 은 아래와 같다.

공유 자원에 대해 여러 개의 프로세스가 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다. 동시에 접근할 때 자료의 일관성을 해치는 결과가 나타날 수 있다. 이를 방지하기 위해서는 프로세스 협력 기법이 필요하다.

https://ko.wikipedia.org/wiki/%EA%B2%BD%EC%9F%81_%EC%83%81%ED%83%9C

 

경쟁 상태 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 논리 상태에서의 경쟁 상태 공학 분야에서 경쟁 상태(race condition)란 둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말

ko.wikipedia.org

 

위키에서의 말을 이해한다면 이미 지식이 있는 사람이고, 한번에 이해가 안갈수도 있는데 한마디로

 

두 개의 스레드가 하나의 자원을 놓고 서로 사용하려고 경쟁하는 상황

이다.

 

이전 포스팅에서 다뤘던 내용 중 뮤텍스와 세마포어 라는 개념이 있다.

자세한 내용은 아래 참고 포스팅을 참고 바란다.

또는 데드락 개념을 한번 알고 가면 도움이 된다.(참고 포스팅 참고)

 

발생 원인
  • 불충분한 동기화
    여러 스레드 또는 프로세스가 적절한 동기화 없이 공유 리소스에 액세스하면 Race Condition이 발생할 수 있다.
  • 비원자적 작업
    여러 단계로 구성되고 단계 사이에서 중단될 수 있는 작업은 비원자적이다. 여러 스레드가 공유 리소스에서 비원자적 작업을 수행하는 경우 Race Condition이 발생할 수 있다.(더 이상 쪼갤 수 없는 행위를 '원자성을 가진다'라고 하며 이러한 특성을 가진 것을 '원자적이다'고 한다.)
  • 실행 순서에 대한 잘못된 가정
    프로그래머가 강제하지 않고 특정 실행 순서를 가정할 때 실제 실행 순서가 다를 경우 Race Condition이 발생할 수 있다.
예시

 

상황은 트랜잭션 단위로 생각하면 쉽다.

- 통장 계좌 1000원

- A 와 B 가 동시에 통장 읽음
- A는 700원 인출( 1000-700 = 잔액 300원)

- B는 300원 인출( 1000-300 = 잔액 700원)

- A 거래 후 트랜잭션은 300원으로 update

- B 거래 후 트랜잭션은 700원으로 update

 

예방법
  • 상호 배제(Mutual Exclusion)
    공유 데이터에 접근하는 부분을 임계 영역(Critical Section)으로 지정하고, 한 번에 하나의 실행 흐름만 해당 영역에 들어가도록 한다.
  • 공유 데이터를 최소화한 병렬 처리 설계
    데이터를 적절히 분리하여 각 스레드가 독립적으로 처리하도록 설정
  • 스레드 안전성 보장(Thread Safe)
    공유 데이터를 수정하는 함수나 메서드를 스레드 안전하도록 구현
    이를 위해 스레드 동기화 기법을 사용하거나 불변 객체(Immutable Object)패턴 적용
  • 테스트와 검증
    코드를 작성 후 테스트를 진행
    테스트 코드를 작성해서 원하는 결과가 나오는지 확인 필수

참고 포스팅

https://thenicesj.tistory.com/356

 

Mutex / Semaphore ( 뮤택스 와 세마포어 )

동기화를 위해 이용되는 도구인 뮤택스와 세마포어에 대해서 정리를 해볼 것이다. Mutex (뮤택스) 자원에 대한 접근을 동기화 하기 위해 사용되는 상호 배제 기술이다. 공유된 자원의 데이터 혹은

thenicesj.tistory.com

https://thenicesj.tistory.com/381

 

교착상태 / 기아상태

교착상태(Deadlock)란 서로 다른 프로세스가 서로 점유하고 있는 자원의 반납을 대기하고 있는 상태를 의미한다. 발생조건 상호 배제: 한 번에 한 프로세스만 해당 자원을 사용할 수 있어야 함 점

thenicesj.tistory.com

 

반응형

'IT > Knowledge' 카테고리의 다른 글

키네시스 스프링(Kinesis Spring) 이란  (10) 2024.10.15
웹 GL(WebGL)  (21) 2024.10.03
webOS 란?  (9) 2024.10.02
프림(Prim) 알고리즘  (12) 2024.10.01
다익스트라 알고리즘(Dijkstra)  (16) 2024.09.29

댓글