PSk*_*cik 5 c atomic c11 stdatomic atomicinteger
我有一个struct,叫它struct foo,我想在上面添加一个atomic_flag变量。到目前为止,我一直在研究calloc该结构,因为它主要需要零初始化。我应该如何初始化atomic_flag成员?
struct foo{
//...
atomic_flag a_flg;
//...
};
struct foo *foop = calloc(1,sizeof *foop);
if(!foop) return -1;
//should I be giving up `calloc` (/`malloc`+`memset`) in favor of `malloc`+this?
*foop = (struct foo){ ATOMIC_FLAG_INIT };
Run Code Online (Sandbox Code Playgroud)
编辑:
我发现了Jens Gustedt的与此相关的DR#421,它建议将零/默认初始化仅用于s。我怎样才能知道它是否被接受?atomic_flag
C11 标准在 7.17.8p4 上说:
atomic_flag未显式初始化的AnATOMIC_FLAG_INIT最初处于不确定状态。
并且没有指示atomic_flag类型是什么或其内容,因此归零在这里无济于事。
您需要使用宏或atomic_flag_clear或atomic_flag_clear_explicit函数将其初始化为已知状态。