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++ 연산은 사실 세 가지 단계로 구성됩니다:

  1. counter의 값을 메모리에서 읽음
  2. counter에 1을 더함
  3. 메모리에 값을 다시 저장

두 스레드가 동시에 이 단계를 수행할 경우, 데이터 손실이 발생할 수 있습니다.


Race Condition의 방지 필요성

Race Condition은 데이터 무결성 손실프로그램의 비결정적 동작을 일으킬 수 있습니다.

해결을 위해 필요한 동기화 기법:

  • 뮤텍스(Mutex): 한 번에 하나의 스레드만 자원 접근 허용.
  • 세마포어(Semaphore): 제한된 수의 스레드만 자원 접근 허용.
  • 원자적 연산(Atomic Operation): 단일 연산으로 데이터 일관성 보장.

이러한 해결 기법들은 다음 게시글에서 보다 자세히 설명하겠습니다.


결론

  • Race Condition(경쟁 상태)는 다중 스레드 환경에서 공유 자원에 동시 접근할 때 발생하는 문제입니다.
  • Race Condition을 방지하지 않으면 데이터 손실이나 비정상적인 프로그램 동작이 발생할 수 있습니다.
  • 다음 게시글에서 Race Condition을 방지하는 동기화 기법들에 대해 자세히 설명드리겠습니다.
반응형