레이스 조건 (Race Condition)
두 개 이상의 이벤트가 서로에게 의존적이며, 이벤트의 순서나 동시성에 따라 결과가 달라지는 상황입니다.
하나의 task에서 두개의 실행 흐름이 트러지거나, 정해지지 않은 경우
예측 불가능한 결과를 만들어낸다.
발생 예시:
T1 → x , T2 → y : x가 y 보다 먼저 실행되어야 된다.
흐름에 따라 문제가 발생함
여러 스레드가 공유 상태를 동시에 업데이트할 때
출력이 상태에 따라 결정될 때
동기화 (Synchronization)
Race Condition 을 방지하기 위해
데이터 레이스 (Data Race)
전역변수를 여러 쓰레드가 접근한다면 데이터가 제대로 변경되지 않을 수 있다. (순서를 보장하지 못해주는 경우)
예시
T1, T2 두가지 Thread 가 존재한다.
전역변수를 write 연산을 하는데 동시에 접근하고 순서를 정해주지 않아서 원하던 결과가 나오지 않는다.
문제가 발생하는 곳 → Critical Section
Critical Section
한 번에 최대 하나의 제어 흐름만 접근해야 하는 코드 영역입니다.
공유 상태에 접근하는 코드를 포함합니다.
write 연산은 무조건이라고 볼 수 있다.
진행 그래프 (Progress Graph)
concurrent flows과 Critical section을 모델링하는 방법입니다.
n차원 공간 → 각 차원은 동시 실행 흐름을 나타냅니다.
표현:
흐름의 진행은 해당 차원에서의 이동으로 표현됩니다.
임계 영역은 n차원 공간의 영역으로 표현됩니다.
여기에는 들어가면 안됨.
피해서 들어가는 코드를 만들어야된다.
그래프 내의 각 점은 한 스레드에서 명령어 실행 완료를 나타냅니다.
점에 가면 해당 명령어도 실행완료
원자적 연산 (Atomic Operations)
한번실행된 이상 끝까지 실행되어야하는 연산 :아무도 간섭할 수 없다.
아무도 실행하고 있지 않을 경우 자연스럽게 실행되는 연산