CS 공부 & 면접 맛보기 0x0B [운영체제] : Race Condition (경쟁 상태)
2025. 1. 11. 23:00ㆍ코딩 도구/CS 면접 도구
반응형
Race Condition (경쟁 상태)
질문
Race Condition(경쟁 상태)이란 무엇인가요?
면접 답변
Race Condition(경쟁 상태)란 둘 이상의 스레드가 동시에 동일한 자원에 접근하고, 이로 인해 예기치 않은 결과가 발생하는 상황을 의미합니다.
- 발생 조건:
- 공유 자원에 동시 접근.
- 적절한 동기화가 없을 때 발생.
- 해결 필요성:
- Race Condition은 데이터 손실, 예측 불가능한 동작, 프로그램 충돌 등을 일으킬 수 있습니다.
Race Condition을 방지하는 다양한 동기화 방법은 다음 게시글에서 자세히 다루겠습니다.
Race Condition의 원리 및 설명
Race Condition 발생 원리
상황: 두 개의 스레드가 동일한 변수 counter에 동시에 접근한다고 가정합니다.
#include <iostream>
#include <thread>
using namespace std;
int counter = 0;
void increment() {
for (int i = 0; i < 10000; ++i) {
counter++;
}
}
int main() {
thread t1(increment);
thread t2(increment);
t1.join();
t2.join();
cout << "Final Counter Value: " << counter << endl;
return 0;
}
예상 출력: 20000
실제 출력: 20000 미만 (스레드 충돌로 인해 데이터 손실)
왜 발생하는가?
counter++ 연산은 사실 세 가지 단계로 구성됩니다:
- counter의 값을 메모리에서 읽음
- counter에 1을 더함
- 메모리에 값을 다시 저장
두 스레드가 동시에 이 단계를 수행할 경우, 데이터 손실이 발생할 수 있습니다.
Race Condition의 방지 필요성
Race Condition은 데이터 무결성 손실과 프로그램의 비결정적 동작을 일으킬 수 있습니다.
해결을 위해 필요한 동기화 기법:
- 뮤텍스(Mutex): 한 번에 하나의 스레드만 자원 접근 허용.
- 세마포어(Semaphore): 제한된 수의 스레드만 자원 접근 허용.
- 원자적 연산(Atomic Operation): 단일 연산으로 데이터 일관성 보장.
이러한 해결 기법들은 다음 게시글에서 보다 자세히 설명하겠습니다.
결론
- Race Condition(경쟁 상태)는 다중 스레드 환경에서 공유 자원에 동시 접근할 때 발생하는 문제입니다.
- Race Condition을 방지하지 않으면 데이터 손실이나 비정상적인 프로그램 동작이 발생할 수 있습니다.
- 다음 게시글에서 Race Condition을 방지하는 동기화 기법들에 대해 자세히 설명드리겠습니다.
반응형
'코딩 도구 > CS 면접 도구' 카테고리의 다른 글
CS 공부 & 면접 맛보기 0x0D [운영체제] : 데드락(Deadlock) (0) | 2025.01.15 |
---|---|
CS 공부 & 면접 맛보기 0x0C [운영체제] : Race Condition을 방지하는 방법 (0) | 2025.01.13 |
CS 공부 & 면접 맛보기 0x0A [운영체제] : LRU 캐싱 (Least Recently Used Cache) (0) | 2025.01.10 |
CS 공부 & 면접 맛보기 0x09 [운영체제] : 프로세스와 스레드의 차이 (0) | 2025.01.09 |
CS 공부 & 면접 맛보기 0x08 [자료구조] : 그래프와 트리의 차이점 (0) | 2025.01.08 |