gpt4 book ai didi

c++ - __sync_bool_compare_and_swap 编译器标志和包含

转载 作者:行者123 更新时间:2023-11-30 04:34:27 24 4
gpt4 key购买 nike

我正在研究无锁数据结构,并正在尝试 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

至于你的问题出在哪里,没有看到你的其余代码就很难说。无锁算法非常很难做到正确;很容易错过一些小的竞争条件。坚持使用锁,除非您有充分的理由不这样做。

关于c++ - __sync_bool_compare_and_swap 编译器标志和包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6023310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com