// created a copy of CNode and added the new value
CNode *copyCNode = new CNode;
//memcpy(c, iNode->mainNode->cNode, sizeof(*(iNode->mainNode->cNode)));
memcpy(copyCNode, iNode->mainNode->cNode, sizeof(CNode));
CNode *updated_cnode = inserted(copyCNode, b, index);
std::cout << "temporay CNode created : " << updated_cnode->branch[index]->sNode->value << std::endl;
if(memcmp(copyCNode, iNode->mainNode->cNode, sizeof(CNode)) == 0){
std::cout << "mainNode is not changed " << std::endl ;
}else{
std::cout << "mainNode is changed" << std::endl;
}
bool cas_ret = __sync_bool_compare_and_swap(&iNode->mainNode->cNode, copyCNode, updated_cnode);
std::cout << "return cas_ret : " << cas_ret << std::endl;
if(cas_ret){
std::cout << "New added value " << iNode->mainNode->cNode->branch[index]->sNode->value << std::endl;
return 0; // successfully attached the node
}
else{
return 1;
}
위의 코드는 내 코드 기반의 일부입니다. 컴파일 오류가없고 코드가 정상적으로 실행 중입니다. 그러나 __sync_bool_compare_and_swap 함수는 항상 내 코드에서 false를 반환합니다. CAS 함수 호출 전에도 메모리 비교 (memcpy)를 수행하고 두 인수가 동일하다는 것을 보여주었습니다.이 경우 CAS는 세 번째 인수로 값을 스왑해야하지만 그렇지 않습니다.__sync_bool_compare_and_swap이 작동하지 않습니다.
copyCNode이 ->이 아이 노드 -> mainNode-> cNode
updated_cnode의 복사 값 보유 -> 아이 노드 -> mainNode-의 업데이트 된 값을 보유>를 cNode는 (새로운 지점 추가)
는 제안하십시오 해결책. 감사합니다.
감사합니다. 그러나 CAS가 내 경우처럼 가치를 비교하는 데 관심이 없다면. 그런 종류의 문제를 해결하는 방법. iNode-> mainNode-> cNode 및 copyCNode 둘 다 포인터이며 평소대로 두 메모리의 위치가 다릅니다. – Django