공유 변수 쓰기는 읽기와 쓰기가 분리될 때 깨진다
두 스레드가 같은 값을 읽고 각각 증가 값을 저장하면 마지막 store가 앞선 결과를 덮어쓴다. 임계구역은 이 구간을 하나의 순서로 묶는다.
read
counter=10
둘 다 같은 값 확인
compute
+1
지역 레지스터에서 계산
store
11
마지막 저장이 이김
lock
one at a time
read-add-store를 묶음
상태
보장되는 것
실패 증상
lock 없음
원자성 없음
lost update
mutex
상호 배제
대기 시간이 생김
atomic
단일 연산 보장
복합 조건에는 부족
condition
조건 대기
while 재검사 필요