Race Condition
→ 두 개 이상의 프로세스/ 스레드들이 하나의 리소스에 동시에 접근하기 위해 경쟁하는 상태
발생 경우
- 커널 코드 실행 중에 인터럽트가 발생할 경우
- 프로세스가 시스템 콜을 하여 커널모드로 진입해서 작업을 수행하는 도중에 문맥 교환이 발생할 경우
- 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근할 경우
문제
Mutual exclusion (상호 배제)
: 한 번에 하나의 프로세스나 스레드만 공유 리소스에 접근할 수 있도록 하는 것
- Race condition을 막기 위해서는 두 개 이상의 프로세스가 공용 데이터에 동시에 접근을 하는 것을 막아야 함
Deadlock (교착 상태)
: 두 개 이상의 프로세스나 스레드가 서로가 공유 리소스를 해제하기를 기다리면서 진행하지 못하는 상황
- 교착 상태는 시스템 전체의 리소스 이용 불가능을 초래할 수 있으며, 올바른 동기화 기술을 통해 관리하거나 피해야 함
Starvation (기아 상태)
: 프로세스나 스레드가 필요한 리소스에 액세스하지 못하고 진행하지 못하는 상태
- 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 결과적으로는 아무것도 완료되지 못하는 상태
- 일부 프로세스에 우선권을 부여하는 스케줄링 알고리즘이 일부 프로세스를 계속 대기하게 되면서 발생
race condition일 때 발생하는 문제점을 예방하는 방법
⇒ 세마포어 & 뮤텍스
references
👉 https://iredays.tistory.com/125