나는 위키 피 디아에서, 연습 책에서 동시성에서 ABA 문제를 조사하고 내가 ABA 문제의 근본 원인을 알고있는 것처럼 나는 예전과 같이 알고리즘으로 우리가 같은 그 상태를 확인하는 것이 post자동 가비지 콜렉션이 ABA 프로 우 블을 제거하는 이유는 무엇입니까?
다음 읽고 있지만, 알고리즘은 그 상태를 의미한다 손대지 않았다. 스택
예 :
추가 할 수있는 요소는 우리가 다음과 같은 알고리즘으로를 사용하여 스택 :
create new stack node(save to `newNode` variable)
while(true) {
oldHead = stack.get();
newNode.next = oldHead; // point_1
if(stack.compareAndSet(oldhead, newNode)) { // atomically replace head if now head same as was in start of iteration
break;
}
}
단계 ABA의 문제에 어떤 LEED :
초기 상태
a->b->c // a-head, c- tail.
Thread_1이 값을 추가하려고 시도 함스택 및 OS에이의 compareAndSet 동작 (point_1) 전의 실
Thread_2 다음 팝업 실행 (Thread_1 여전히 정지)
B-> C // B 헤드, C- 꼬리 중단.
Thread_3 다음 팝업을 실행 (Thread_1은 여전히 중단)
C // C-머리, C- 꼬리.
Thread_4 다음
a
가 (Thread_1 여전히 정지)A-> C // A-헤드 C- 꼬리를 밀어 실행된다.
Thread_wake up and cas 작업이 성공적으로 실행되는 경우도 있지만, 경우에 따라 바람직하지 않을 수 있습니다.
Althoug this post 자동 가비지 콜렉션이 문제를 제거 왜 이해가 안 허용됩니다.
저는 C에서 전문가는 아니지만 C에서는 두 개의 다른 객체에 대해 하나의 메모리 범위를 할당 할 수 없다는 것을 알고 있습니다.
더 명확히 할 수 있습니까?