[OS] Race Condition과 해결 방법

bagt13·2024년 12월 4일
0

CS

목록 보기
14/14
post-thumbnail

Race Condition(경쟁 상태)이란?

두 개 이상의 프로세스나 쓰레드가 동시에 공유 자원에 접근하려고 할 때, 그 실행 순서나 타이밍에 따라 결과가 달라지는 상황을 말한다.

주로 적절한 동기화 메커니즘 부재 등 동시성 문제를 고려하지 않았을때 발생할 수 있다.


Race Condition의 해결 방법

  1. 뮤텍스(Mutex)세마포어(Semaphore)와 같은 동기화 도구를 사용해 쓰레드의 자원 접근을 제어한다.
  2. 임계 구역(Critical Section)을 설정한다.
  3. 공유 자원을 줄이거나 불변성(immutable)을 유지하도록 설계한다.

임계구역(Critical Section)이란?

공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 영역을 뜻하며, 이 임계구역을 해결하는 방법이 동기화 메커니즘(ex. 세마포어)을 사용하는 것이다.


세마포어(Semaphore)란?

공유된 자원의 데이터를 여러 프로세스/스레드가 접근하는 것을 막는 방식이다.

뮤텍스와 달리 동기화 대상이 하나 이상이며, 사용하고 있는 스레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성한다.

공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근할 수 있으며, 각 프로세스는 세마포어의 값을 확인하고 변경할 수 있다.


뮤텍스(Mutex)란?

공유된 자원의 데이터를 여러 프로세스/스레드가 접근하는 것을 막는 방법이며, 세마포어와 달리 동기화 대상이 하나이다.

즉, 특정 자원을 하나의 프로세스/스레드만 사용할 수 있도록 한다. 한 프로세스에 의해 소유될 수 있는 Key를 기반으로 한 상호 배제 기법이고, Key에 해당하는 어떤 객체(Object)가 있으며, 이 객체를 소유한 스레드/프로세스만이 공유 자원에 접근할 수 있다.

profile
주니어 백엔드 개발자입니다😄

0개의 댓글