← 질문 목록
#409깊이 0

CAS 연산의 ABA 문제는 무엇인가?

자료구조 · 알고리즘깊이

답변 연습

내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요

값이 A에서 B로 갔다가 다시 A로 돌아온 사이를 못 알아채는 것이다. 비교는 값만 보므로 그동안 아무 일도 없던 것과 구별되지 않는다.

순서스레드 1스레드 2
1값 A를 읽는다아무것도 하지 않습니다
2멈춰 있다A를 B로 바꾼다
3멈춰 있다B를 다시 A로 바꾼다
4A 그대로라 보고 바꾼다아무것도 하지 않습니다

값만 보면 둘이 같다. 그래서 스레드 1의 교체는 성공하는데, 그사이 바뀐 것을 전제로 한 판단은 이미 틀어져 있다.

숫자만 다루면 대개 문제가 안 된다. 아프게 되는 것은 그 값이 무언가를 가리킬 때다. 같은 주소에 다른 것이 다시 놓이면 지워진 것을 붙들게 된다.

연결 구조에서 자주 나온다. 스택 꼭대기가 A였다가 A로 돌아왔는데 그 아래가 통째로 바뀌어 있으면 없는 자리를 가리킨다.

막는 방법은 값에 표를 붙이는 것이다. 값과 세대 번호를 한 낱말에 묶어 한 번에 비교하면 A로 돌아와도 번호가 달라 실패한다.

없앤 것은 아니다. 번호가 한 바퀴 돌면 같은 짝이 다시 나온다. 근본적으로 막으려면 회수 시점을 미루는 쪽을 쓴다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

CAS 연산의 ABA 문제는 무엇인가?