我有struct
包含两个整数。
struct ref{
int next;
int marked;
}
我需要使用CAS原子地比较其中两个结构。
__sync_bool_compare_and_swap(&(ref1),old,new);
如何投放此struct
以便在c中将其引用为long long
?
我试过了:
__sync_bool_compare_and_swap(&((long long)(ref1)),(long long)(old),(long long)(new));
但它给了我这个错误:
aggregate value used where an integer was expected
答案 0 :(得分:0)
这是个坏主意,因为结构打包和对齐可能会使结构大于2*sizeof(int)
。
http://en.wikipedia.org/wiki/Data_structure_alignment
这是否必须与CAS一起使用,或者互斥量是否足够?
或者,如果您可以保证填充和对齐问题,可以使用联合:
答案 1 :(得分:-1)
假设ref1
是结构类型ref
的实例,而old
和new
已经是long long
类型的实例,那么您应该能够到:
__sync_bool_compare_and_swap((long long *)&ref1, old, new);