_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
以外的类型,包括 char
、short
、long long
和 __int128
(在 x64 上)。
请注意,您可能需要将非整数类型转换为适当大小的整数,__sync_val_compare_and_swap
才能使用它们。
我正在尝试实现无锁列表。对于这个项目,我需要原子比较和交换指令,该指令可以将 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
以外的类型,包括 char
、short
、long long
和 __int128
(在 x64 上)。
请注意,您可能需要将非整数类型转换为适当大小的整数,__sync_val_compare_and_swap
才能使用它们。