[10분 테코톡] 벨로의 Race Condition 이해하기
- Race Condition은 여러 스레드/프로세스가 공유 자원에 동시에 접근하여 실행 순서에 따라 결과가 달라지는 현상 🚦
- 전기 공학에서 유래, 두 신호의 도착 시간 차이에 따라 회로 출력이 달라지는 현상에서 착안 💡
- 소프트웨어에서는 스레드/프로세스가 공유 데이터 상태에 영향을 주는 상황으로 해석 💻
- Race Condition은 같은 코드를 실행해도 결과가 다를 수 있으며, 순서 의존성을 가짐 🔄
- 커피를 채우는 예시를 통해 Race Condition 발생 상황을 설명 (공유 자원: 커피 재고, 스레드: 행성) ☕
- 메모를 사용한 해결 시도에도 불구하고, 동시 접근 문제로 인해 Race Condition이 발생할 수 있음 📝
- Race Condition은 평소에는 문제가 없다가 가끔 예외적인 상황에서 문제가 발생함 ⚠️
- Race Condition은 커피를 채워넣는 작업이 원자적으로 수행되지 않기 때문에 발생 ⚛️
- Read-Modify-Write 패턴: 값을 읽고, 변경하고, 쓰는 과정에서 다른 스레드가 끼어들 수 있음 ✍️
- 원자적 연산: 모든 과정을 다른 스레드의 방해 없이 한 번에 처리해야 Race Condition을 방지 🛡️
- 자바 코드 예시: 간단한 후위 증가 연산도 여러 단계로 나뉘어 Race Condition 발생 가능 ➕
- 해결 방안: 뮤텍스, 세마포어, CAS, 락 프리 등 다양한 방식 활용 가능 (상황에 맞게 선택) 🛠️
- Race Condition은 재현 및 디버깅이 어렵지만, 원리 이해는 데이터 무결성 문제 방지에 중요 🔑
- 핵심 해결 방안은 공유 자원에 대한 접근을 원자적으로 만드는 것 ✨