race-conditioncritical-sectionshared-state

레이스 컨디션과 임계 구역을 설명해 주세요

예상 시간
7
30초 답변

꼬리질문

조금 더 깊게 물어본다면

답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.

race condition은 항상 멀티스레드에서만 생기나요?

부가 설명

문제는 코드 한 줄이 실제로 한 번에 실행된다고 착각할 때 생깁니다. count++처럼 보이는 작업도 값을 읽고, 더하고, 다시 쓰는 단계로 나뉩니다. 두 스레드가 같은 값을 읽은 뒤 각각 1을 더해 쓰면 증가가 한 번 사라질 수 있습니다.

임계 구역은 이런 공유 상태를 건드리는 부분입니다. 해결책은 무조건 lock을 많이 거는 것이 아니라, 공유 상태를 줄이고, 필요한 범위만 보호하고, 가능하면 불변 데이터나 메시지 전달로 경쟁 자체를 줄이는 것입니다. Race condition은 버그가 발생하는 공유 상태와 그 상태를 보호하는 경계를 함께 봐야 합니다.

한 줄 정리

레이스 컨디션은 공유 상태를 건드리는 순서가 결과를 바꾸는 문제이고, 임계 구역은 그 순서를 제어해야 하는 코드입니다.