Ich versuche eine Lock-freie Liste zu implementieren. Für dieses Projekt brauche ich einen atomaren Vergleichs- und Auslagerungsbefehl, der einen 32-Bit-Zeiger mit meiner 'Knoten'-Struktur vergleichen kann.kann _sync_val_compare_and_swap irgendetwas anderes als int zurückgeben?
Der Knoten struct ist wie folgt:
typedef struct node
{
int data;
struct node * next;
struct node * backlink;
}node_lf;
Ich verwende _sync_val_compare_and_swap() durchzuführen Betrieb Vergleichs- und Auslagerungs. Meine Frage ist, kann diese Funktion einen anderen Wert als int zurückgeben? Dies ist, was ich zu tun versucht:
node_lf cs(node_lf * address, cs_arg *old_val, cs_arg *new_val)
{
node_lf ptr;
ptr = (node_lf)__sync_val_compare_and_swap ((int *)address, old_val->node, new_val->node);
return (ptr);
}
wo cs_arg eine andere Struktur ist der Knotenzeiger und andere Buchhaltungsinformationen zu halten.
Wenn es andere Methoden gibt, Atomvergleich und -tausch zu implementieren, schlagen Sie bitte vor.