초보 코린이의 성장 일지
레이스컨디션 (Race Condition) 본문
레이스 컨디션
- 한정된 자원을 동시에 여러 프로세스가 자원을 이용을 위해 경쟁을 벌이는 현상
- 두 개 이상의 프로세스가 공통 자원을 병행적으로 읽거나 쓰는 동작을 할 때 공용 데이터 접근이 어떤 순서에 따라 이루어졌는가에 따라 그 실행 결과가 같지 않고 달라지는걸 의미한다..
- 만일 2개의 프로세스에서 어떤한 수를 3번 더하는 기능을 수행할 때 그 결과값을 얻을 수 있지만, 어떠한 프로세스가 먼저 실행되었는지 알 수 없다. 이 때 Context Switching이 발생하면서 그 문제를 Race Condition라고 부른다.
해결 방법
- Mutex (뮤텍스), Semaphoer(세마포어)
- Thread들이 서로 겹치지 않게 단독으로 실행 할 수 있도록 하나의 임계구역을 만들어 준다.
Mutex (뮤텍스)
- Key를 통해 리소스로의 접근을 관리한다.
- 쓰레드가 공유된 리소스에 접근을 하기 위해서는 Key를 휙득하여야 하며, Key를 가지고 있지 않다면 쓰레드는 다른 쓰레드가 먼저 리소스를 사용한 뒤 Key를 반납하기까지 순서를 기다려야한다.
- 공유자원에서 오직 하나의 프로세스만 접근할 수 있도록함.
Semaphoer(세마포어)
- 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 방법.
- 특정 리소스에 접근할 수 있는 쓰레드의 최대 수를 관리하는 값이 존재.
- 쓰레드가 값을 사용하기 전에 먼저 Semaphoer의 값을 확인한다. 이때 값이 0이면 리소스를 사용할 수 없으며, 다른 쓰레드가 리소스를 사용한 뒤에 값이 증가하여 0이 아닐 경우 리소스를 사용할 수 있따.
- 공유자원에 변수만큼의 프로세스에 접근할 수 있다. 다른 프로세스가 세마포어 해제를 할 수 있음.
'개인 공부' 카테고리의 다른 글
CBD (Component Based Development) 개발 방법론 (0) | 2023.04.19 |
---|---|
소프트웨어 낮은 결합도 / 높은 응집도 (0) | 2023.04.10 |
스마트 포인터 (Smart Pointer) (0) | 2023.04.03 |
가상 메모리 (0) | 2023.03.04 |
IDE (통합 개발 환경 - Integrated Development Environment) (0) | 2023.02.23 |