컴퓨터 사이언스

경쟁상태(Race Condition)

woohap 2024. 10. 25. 21:11

경쟁상태란(Race Condition)

여러 프로세스나 스레드가 동시에 공유 자원에 접근할 때, 실행 순서나 타이밍에 따라 예측할 수 없는 결과가 발생할 수 있는 상황을 의미한다.

이는 단순히 접근 순서에 따른 결과 차이뿐만 아니라, 연산의 중간 단계에서 다른 프로세스나 스레드의 개입으로 인해 발생하는 데이터 불일치나 예기치 않은 동작을포함

→ 공유 자원에 대한 동시 접근으로 인해 데이터 일관성이 깨지고 프로그램의 정확성과 신뢰성이 보장되지 않은 상황

Ex)

공유 자원 A의 초기값이 5인 상황에서 두 스레드1,2가 동시에 공유 자원 A에 접근하려는 경우

스레드 1 : A에 4를 곱함

스레드 2: A에 10을 더함

단, 해당 연산들이 원자적이지 않고 여러 단계로 이루어진다고 한다.

1.  메모리에서 A 값을 읽음
2.  연산 수행 (곱하기 또는 더하기)
3.  결과를 다시 A에 저장

정상 시나리오 (경쟁 없음)

1.  스레드 1 완료 후 스레드 2 수행 // 결과 30
2.  스레드 2 완료 후 스레드 1 수행 // 결과 60

경쟁상태 시나리오

1.  스레드 1이 A를 읽음
2.  스레드 2가 A를 읽음
3.  스레드 1이 연산 수행 // 5 \* 4 = 20
4.  스레드 2가 연산 수행 // 5 + 10 = 15
5.  스레드 1이 A에 20을 저장
6.  스레드 2가 A에 15를 저장
7.  공유자원 A에는 15가 저장됨

** 스레드1, 스레드2가 순서대로 실행되는 것이 아닌 서로 뒤엉켜서 실행됨으로써 예상치 못한 결과 발생

경쟁상태 해결

뮤텍스나 세마포어 같은 동기화 기법을 사용하여 한 번에 하나의 스레드만 공유 자원에 접근할 수 있도록 하여 경쟁상태를 해결할 수 있다. 또한 원자적 연산을 수행하게 만들어서 이를 해결할 수 있다.

'컴퓨터 사이언스' 카테고리의 다른 글

원자적 실행 (Atomic Operation)  (0) 2024.10.28
교착상태  (0) 2024.10.26
세마포어  (0) 2024.10.24
임계영역, 공유자원, Lock, Mutex  (0) 2024.10.23
프로세스와 스레드  (0) 2024.10.22