경쟁 상태

심민혁·2025년 7월 13일

weeklypaper

목록 보기
17/18

멀티스레드 환경에서 발생하는 대표적인 문제 중 하나인 경쟁 상태(Race Condition)에 대해 설명하고, 이를 해결하기 위한 다양한 전략을 설명해보세요.

경쟁 상태는 두 개 이상의 스레드가 같은 자원에 동시 접근할 때 실행 순서에 따라 결과가 달라지는 상황을 말한다. 마치 두개의 스레드들이 경쟁하듯 자원에 접근할려고 하기 때문에 경쟁상태라고 한다.

예를 들어,

A가 변수 값을 읽었다.
B가 변수 값을 읽었다.
A에 1을 더해서 101로 저장
B에 1을 더해서 101로 저장
위와 같은 순서를 진행할때 같은 자원에서 진행 했을경우에는 값이 102가 되어야 하지만 101로 값이 저장됨

이를 해결하기 위해서 다양한 전략을 세울 수 있는데

1. 상호 배제

뮤텍스는 한 번에 하나의 스레드만 특정 코드 영역에 접근 할 수 있도록 보장한다. 하나의 영역에는 하나의 스레드만 진입할 수 있다 key-value같은 개념이다.

2. 세마포어

동시에 접근할 수 있는 스레드의 개수를 제한한다. 한개의 자원에 동시에 접근할 수 있는 스레드의 개수를 제한하여 경쟁 상태를 해결 할 수 있다.

3. 읽기-쓰기 잠금

읽기는 여러 스레드가 동시에 할 수 있지만 쓰기는 하나의 스레드만 가능하도록 하는것이다.
읽기는 여러 스레드가 해도 값을 수정하지 않기 때문에 상관이 없지만 쓰기시에는 값이 변경 될 수 도 있기 때문에 스레드를 하나만 사용하도록 하여 문제를 해결 할 수 있다.

profile
열심히 하고 싶습니다

0개의 댓글