Programming/System
ABA Problem
1. ABA Problem이란? 간단히 말하자면 CAS(Compare And Swap)를 사용해서 자료구조의 아이템을 변경할 때, 포인터가 시스템에 의해 재사용되면서 생기는 문제다. 일단 CAS를 비교할 때 포인터 변수를 가지고 작업을 수행하기 때문에 결국 주소값을 비교하게 된다. 다음 예문을 보자. class Stack { volatile Obj* m_topPtr; Obj* Pop() { while(1) { Obj* preTopPtr = m_topPtr; // (1) if (!preTopPtr) return NULL; // (2) Obj* nextPtr = preTopPtr->next; // (3) if (CompareAndExchange( m_topPtr, preTopPtr, nextPtr)) // ..
2016. 10. 19.