// 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;
}
Le code ci-dessus fait partie de ma base de code. Il n'y a pas d'erreur de compilation et le code fonctionne correctement. Mais la fonction __sync_bool_compare_and_swap renvoie toujours false dans mon code. Même avant l'appel de la fonction CAS, j'ai fait la comparaison de la mémoire (memcpy) et montré que les deux arguments sont égaux, dans ce cas CAS devrait inverser la valeur avec le troisième argument, mais ce n'est pas le cas.__sync_bool_compare_and_swap ne fonctionne pas
copyCNode -> Contient la valeur de copie de inode-> mainNode-> Nœuds-C
updated_cnode -> Peut contenir la valeur actualisée de inode-> mainNode-> Nœuds-C (Nouvelle branche ajouté)
S'il vous plaît suggérer une Solution. Merci
Merci. Mais si CAS n'est pas intéressé à comparer la valeur comme dans mon cas. Alors comment résoudre ce genre de problème. En tant que iNode-> mainNode-> cNode et copyCNode, les deux sont des pointeurs et, comme d'habitude, les deux ont un emplacement mémoire différent. – Django