我正在研究无锁数据结构,并尝试使用 CAS 指针。
使用比较和交换时,我应该将哪些标志传递给编译器?我已经获得了http://locklessinc.com/内存分配器的许可证。我也在使用netbeans 7。
目前我唯一的标志是在链接器下,-march=native -llllalloc。
但是,当我运行该程序时,我会遇到奇怪的内存问题。我想我可能缺少一个或两个标志... 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));