일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프로세스 상태 전이도
- 뮤텍스(Mutex)
- 은행원 알고리즘
- 문맥 교환
- 프로세스 제어 블록
- 유저 모드
- Multi-level Queue
- 교착 상태
- 블로킹 논블로킹
- 임계 구역
- 스레드 동기화
- 스레드
- Non-Preemptive
- Heap영역
- 커널 모드의 동기화
- 유저 모드의 동기화
- 프로세스
- Light Weight Process
- 인터락 함수
- The Banker's Algorithm
- 동기 비동기
- Activity
- 모니터(Monitor)
- Stack영역
- 방금 그 곡
- Process Control Block
- Reentrant
- 커널 모드
- 경량 프로세스
- The DIning Philosopher Problem
Blog For Me
[운영체제] 동기화(Synchronization), 경쟁 상태(Race Condition) 본문
Race Condition
프로세스들이나 스레드들이 공유 자원에 대해 경쟁 상태에 있는 것을 의미한다. 다시 말해서, 여러 프로세스들과 스레드들이 공유 자원에 동시에 접근할 때, 접근 타이밍과 순서가 얽혀서 의도한 결과가 달라지는 데이터 일관성을 해칠 수 있는 상태에 이르게 될 수 있다.
예를 들어, 5의 값을 가지고 있는 공유 자원인 count가 있고, 이 자원에 동시에 접근하는 스레드 A, B가 있다. 여기서 A는 count++를 수행하고, B는 count--를 수행한다.
스레드 A는 내부적으로 이러한 작업을 수행한다.
register1 = count
register1 = register1 + 1
count = register1
한편, 스레드 B는 내부적으로 이러한 작업을 수행한다.
register2 = count
register2 = register2 - 1
count = register2
두 프로세스의 작업이 서로 조금씩 나누어 수행되면, 데이터 불일치를 초래할 수 있다.
스레드 A: register1 = count {register1 = 5}
스레드 A: register1 = register1 + 1 {register1 = 6}
스레드 B: register2 = count {register2 = 5}
스레드 B: register2 = register2 - 1 {register2 = 4}
스레드 A: count = register1 {count = 6}
스레드 B: count = register2 {count = 4}
마지막에 실행된 문장이 무엇이냐에 따라 count 값는 4 또는 6이 될 수도 있다. 이처럼, 스레드 A와 스레드 B가 공유 자원에 접근하기 위해 서로 경쟁상태에 있는 것을 race condition이라 한다. 이런 경우에 동기화를 이용해야 하는데, 이는 여러 프로세스나 스레드의 순서를 정해서 여러 개의 프로세스, 스레드가 동시에 접근하는 것을 방지하여 데이터의 일관성을 유지시켜주는 기법이다.
'컴퓨터과학 > 운영체제' 카테고리의 다른 글
[운영체제] 유저 모드의 동기화 vs 커널 모드의 동기화 (0) | 2021.11.30 |
---|---|
[운영체제] 스레드 동기화 문제 (0) | 2021.11.30 |
[운영체제] 동기와 비동기, 블로킹과 논블로킹 (0) | 2021.11.28 |
[운영체제] CPU 스케줄링(Scheduling) (0) | 2021.11.14 |
[운영체제]스레드 추가내용 (0) | 2021.11.11 |