초보 코린이의 성장 일지

레이스컨디션 (Race Condition) 본문

개인 공부

레이스컨디션 (Race Condition)

코오린이 2023. 4. 10. 00:56

레이스 컨디션

- 한정된 자원을 동시에 여러 프로세스가 자원을 이용을 위해 경쟁을 벌이는 현상

- 두 개 이상의 프로세스가 공통 자원을 병행적으로 읽거나 쓰는 동작을 할 때 공용 데이터 접근이 어떤 순서에 따라 이루어졌는가에 따라 그 실행 결과가 같지 않고 달라지는걸 의미한다..

- 만일 2개의 프로세스에서 어떤한 수를 3번 더하는 기능을 수행할 때 그 결과값을 얻을 수 있지만, 어떠한 프로세스가 먼저 실행되었는지 알 수 없다. 이 때 Context Switching이 발생하면서 그 문제를 Race Condition라고 부른다.

 

해결 방법

- Mutex (뮤텍스), Semaphoer(세마포어)

- Thread들이 서로 겹치지 않게 단독으로 실행 할 수 있도록 하나의 임계구역을 만들어 준다.

 

Mutex (뮤텍스)

- Key를 통해 리소스로의 접근을 관리한다.

- 쓰레드가 공유된 리소스에 접근을 하기 위해서는 Key를 휙득하여야 하며, Key를 가지고 있지 않다면 쓰레드는 다른 쓰레드가 먼저 리소스를 사용한 뒤 Key를 반납하기까지 순서를 기다려야한다.

- 공유자원에서 오직 하나의 프로세스만 접근할 수 있도록함.

Semaphoer(세마포어)

- 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 방법.

- 특정 리소스에 접근할 수 있는 쓰레드의 최대 수를 관리하는 값이 존재.

- 쓰레드가 값을 사용하기 전에 먼저 Semaphoer의 값을 확인한다. 이때 값이 0이면 리소스를 사용할 수 없으며, 다른 쓰레드가 리소스를 사용한 뒤에 값이 증가하여 0이 아닐 경우 리소스를 사용할 수 있따.

- 공유자원에 변수만큼의 프로세스에 접근할 수 있다. 다른 프로세스가 세마포어 해제를 할 수 있음.

 

Comments