Gra*_*dpa 5 c atomic bit-fields
在C中是否有可移植的方法来在编译时找出位字段的掩码?
理想情况下,我希望能够原子地清除这样的字段:
struct Reference {
unsigned age : 3;
unsigned marked : 1;
unsigned references : 4;
};
struct Reference myRef;
__sync_and_and_fetch(&myRef, age, ~AGE_MASK);
Run Code Online (Sandbox Code Playgroud)
否则我必须取消对结构的锁定,这比我想要的更重.
或者,如果你真的想要面具:
union Reference {
unsigned asWord;
struct {
unsigned age : 3;
unsigned marked : 1;
unsigned references : 4;
} asFields;
}
Reference agemask_ref;
agemask_ref.asFields = (typeof(agemask_ref.asFields)){0, -1, -1};
unsigned agemask = agemask_ref.asWord;
Run Code Online (Sandbox Code Playgroud)