__sync_bool_compare_and_swap编译器标志和包含

__sync_bool_compare_and_swap Compiler Flags and Includes

本文关键字:标志 包含 编译器 and sync bool compare swap      更新时间:2023-10-16

我正在研究一个无锁数据结构,并正在尝试CAS指针。

使用比较和交换时,我应该将哪些标志传递到编译器中?我已经获得了 http://locklessinc.com/内存分配器的许可证。我也在使用 netbeans 7。

目前我唯一的标志在链接器下,-march=native -lllalloc。

但是,当我运行该程序时,我遇到了奇怪的内存问题。我想我可能错过了一两面旗帜...Netbeans 还说"无法解析标识符__sync_bool_compare_and_swap",但它仍然编译它。

有人有什么想法吗?

数据结构:

struct Ambigous
{
    short type;
    union{
        struct{
            bool inCleanup;
            KEY key;
            VALUE value;
        };
        Ambigous* volatile list[MAIN_SIZE];//CHANGED ordering, still have netbeans error
    };
};

我的比较和交换代码

bool res= __sync_bool_compare_and_swap(&(local->list[pos]), current_node, new_node);

如何分配内存:

Ambigous *temp_spine = (Ambigous *) calloc(1,sizeof (Ambigous));

__sync_bool_compare_and_swap是GCC的内在函数。您不需要任何特定的编译器标志;但是,您的 IDE 将无法找到其定义,因为它没有定义。它可能不适用于其他编译器;例如,Visual Studio编译器称之为InterlockedCompareExchange

至于你的问题在哪里,如果不看到你的其余代码,很难说。无锁算法很难正确;很容易错过一些小的比赛条件。坚持锁,除非你有很好的理由不这样做。