可以_sync_val_compare_and_swap返回除int之外的任何内容吗?

时间:2016-06-10 08:37:45

标签: c gcc compare-and-swap

我正在尝试实现一个无锁列表。对于这个项目,我需要和原子比较和交换指令,可以比较32位指针到我的节点'结构

节点结构如下:

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

我正在使用_sync_val_compare_and_swap()来执行比较和交换操作。我的问题是,这个函数能否返回除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 是另一个用于保存节点指针和其他簿记信息的结构。

如果还有其他方法可以实现原子比较和交换,请建议。

1 个答案:

答案 0 :(得分:1)

  

我的问题是,这个函数能否返回int以外的值?

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

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