_sync_val_compare_and_swap return 可以是除 int 之外的任何东西吗?

can _sync_val_compare_and_swap return anything other than int?

我正在尝试实现无锁列表。对于这个项目,我需要原子比较和交换指令,该指令可以将 32 位指针与我的 'node' 结构进行比较。

节点结构如下:

 typedef struct node
 {
    int data;
    struct node * next;
    struct node * backlink;
 }node_lf;

我正在使用 _sync_val_compare_and_swap() 来执行比较和交换操作。我的问题是,这个函数 return 可以是 int 以外的值吗? 这就是我想要做的:

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);
}

其中 cs_arg 是保存节点指针和其他簿记信息的另一个结构。

如果还有其他实现原子比较和交换的方法,请指教

My question is, can this function return a value other than int?

答案是肯定的,__sync_val_compare_and_swap 可以使用 int 以外的类型,包括 charshortlong long__int128(在 x64 上)。

请注意,您可能需要将非整数类型转换为适当大小的整数,__sync_val_compare_and_swap 才能使用它们。