경쟁 상태
경쟁 상태(Race condition)은 여러 프로세스가 공유 자원에 동시에 접근함에 따라 일어나는 예상치 않은 이상이나 상태를 의미한다.
공유 메모리상에 있는 변수를 여러 프로세스가 증가시키는 상황을 예로 들 수 있다.
- P1이 공유 변수 v의 값 1을 읽는다.
- 직후 P2가 v의 값 1을 읽는다.
- 이어서 P1이 v의 값 1에 1을 더해 2를 쓴다.
- P2도 v의 값 1에 1을 더해 2를 쓴다.
경쟁 상태를 일으키는 코드 영역을 임계 구역(Critical section)이라고 한다.
이 문서를 인용한 문서
- 동시성 프로그래밍
- 뮤텍스
-
뮤텍스(MUTEX)는 상호배제(Mutual exclusion)의 약자로, 경쟁 상태을 실행할 수 있는 프로세스 수를 1개로 제한하는 동기 처리 기법을 의미한다.
-
- 세마포어
-
*cnt += 1; // 락을 획득할 수 있으면 카운터를 증가하고 임계 구역으로 진입한다.
-
- Readers-writer 락
-
RW 락은 경쟁 상태가 발생하는 이유는 쓰기 연산 때문이며, 쓰기만 배타적으로 수행하면 문제가 발생하지 않는다는 관찰에 기반한다.
-