ABA 문제를 설명하는 기사 하나를 읽었지만 이해할 수없는 것이 있습니다. 나는 작동하지 않는 소스 코드가 있으며 기사의 예제와 유사하지만 문제를 이해하지 못합니다. head_의 실제 값은 동일하지만 (가) next_ 포인터가"ABA"문제를 이해하는 데 도움이 필요합니다.
가 아니라 어떻게 될 수 있습니다 여기에 기사
http://fara.cs.uni-potsdam.de/~jsg/nucleus/index.php?itemid=6
이 말씀은 무엇입니까? 이 명 구조가 메모리에 같은 지역에
struct node {
node *next;
data_type data;
};
"head_"및 "현재"점 개체를, 어떻게 다른에 _-> 다음과 전류 -> 다음 포인트를 머리 수 있습니까?
또한 다음과 같이 말합니다 : 마지막 작업 인 foo에 의한 비교 및 교체가 실패했을 때 성공한 것입니다.
그럼 어떻게해야합니까? 같은 주소를로드하고 다시 시도 하시겠습니까? 그 차이점은 무엇입니까?
현재 내 코드에서 나는 비슷한 주소
deleted.compare_exchange_strong(head, 0);
와 객체에 다른 스레드에 의해 변경 될 수 있지만 변경 한 경우 개체가 아니라 초기화 및 그것의 목적에 CompareAndSwap을 비슷한 상황을 가지고 다음 포인터는 초기화 된 객체에 대한 포인터를 포함하고 무엇이 문제입니까?
미리 감사드립니다.
코드 게시, 실행시 발생하는 상황, 실행시 예상되는 상황을 제안하십시오. 그 블로그 게시물은 길고 말문입니다.:) 동시성 프리미티브를 배우고 싶다면 Curt Schimmel의 Unix Systems for Modern Architect : 대칭형 멀티 프로세싱과 커널 프로그래머 용 캐싱 (http://www.powells.com/biblio?isbn=9780201633382) – sarnold
을 읽는 것이 좋습니다. 나는 나의 코드를 게시하고 설명한다. 그것은 블로그에서와 똑같은 설명이 될 것이고 어쩌면 더 나쁜 것일 것이다. 나의 영어가 충분하지 않기 때문에 :) 내 소스는 거의 동일하고 작동하지 않으므로, 나는 그것을 체크하고 싶다. ABA 문제가 실제로 발생했는지 여부. 책을 가져 주셔서 감사합니다 : 나는 재미있는 것을 찾고있었습니다. 그러나 – ledokol
그것은 나에게 ABA 문제가되지 않는 것 같습니다. 멀티 스레딩 문제가있는 것 같지만, 지금까지 ABA를 이해 한 방식이 아닙니다. –