将结构填充到C中的长整数中

时间:2013-10-15 21:04:21

标签: c casting struct

我有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

2 个答案:

答案 0 :(得分:0)

这是个坏主意,因为结构打包和对齐可能会使结构大于2*sizeof(int)

http://en.wikipedia.org/wiki/Data_structure_alignment

这是否必须与CAS一起使用,或者互斥量是否足够?

或者,如果您可以保证填充和对齐问题,可以使用联合:

http://www.rightcorner.com/code/CPP/Basic/union/sample.php

答案 1 :(得分:-1)

假设ref1是结构类型ref的实例,而oldnew已经是long long类型的实例,那么您应该能够到:

__sync_bool_compare_and_swap((long long *)&ref1, old, new);