__sync_bool_compare_and_swap编译器标志和包含
__sync_bool_compare_and_swap Compiler Flags and Includes
我正在研究一个无锁数据结构,并正在尝试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
至于你的问题在哪里,如果不看到你的其余代码,很难说。无锁算法很难正确;很容易错过一些小的比赛条件。坚持锁,除非你有很好的理由不这样做。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 如何在 Visual Studio Code 中包含编译器标志
- GCC - 包含编译标志的宏
- 编译器标志,用于将 some_file_name.h 包含在所有文件中
- 正确的标志将目录传递给 G++ 以包含文件
- 在g++中包含额外的链接器标志有什么害处吗?
- 使用/CLR标志构建的本机dll包含托管类
- __sync_bool_compare_and_swap编译器标志和包含