初始化 atomic_flag

Initializing an atomic_flag

我有一个 struct,我们称它为 struct foo,我想向其添加一个 atomic_flag 变量。到目前为止,我一直在 callocing 结构,因为它主要需要进行零初始化。 我应该如何初始化 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 };

编辑:

我发现这个相关的 DR#421 by Jens Gustedt 建议 zero/default-initialization 只适用于 atomic_flag。我怎样才能知道它是否被接受?

C11 标准在 7.17.8p4 上说:

An atomic_flag that is not explicitly initialized with ATOMIC_FLAG_INIT is initially in an indeterminate state.

并且没有指示 atomic_flag 类型是什么或它的内容,因此清零在这里没有帮助。

您需要使用宏或 atomic_flag_clearatomic_flag_clear_explicit 函数将其初始化为已知状态。