簡體   English   中英

_sync_val_compare_and_swap是否可以返回int以外的任何東西?

[英]can _sync_val_compare_and_swap return anything other than int?

我正在嘗試實現無鎖列表。 對於這個項目,我需要原子比較和交換指令,該指令可以將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是另一個保存節點指針和其他簿記信息的結構。

如果還有其他實現原子比較和交換的方法,請提出建議。

我的問題是,此函數可以返回int以外的值嗎?

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

請注意,您可能需要將非整數類型轉換為適當大小的整數,以使__sync_val_compare_and_swap可以使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM