Unsafe Interleaving

비직렬 스케줄

동시에 같은 값을 읽고 각각 쓰면 한쪽 변경이 덮인다. 비직렬 스케줄은 단순히 명령이 섞였다는 뜻이 아니라, 충돌 순서 그래프가 순환을 만들거나 최종 값이 어떤 직렬 실행과도 맞지 않는 상태를 말한다.

손실
충돌
검사
순서T1T2의미
1R(A=100)기존 값 읽기
2R(A=100)같은 값 읽기
3W(A=90)출금 반영
4W(A=80)T1 결과 덮임
손실 갱신

T1의 W(A=90)이 T2의 W(A=80)으로 덮여 두 출금이 모두 반영되지 않는다.

T1 ↔ T2
충돌 직렬성 검사

같은 데이터 A에 대한 read/write, write/write 충돌의 방향을 그렸을 때 순환이 있으면 안전하지 않다.

방지 기준: 읽은 값을 다시 쓸 때는 잠금, 원자적 update, 낙관적 버전 컬럼 중 하나로 “내가 읽은 값이 아직 유효한지”를 확인해야 한다.