初始化 atomic_flag
Initializing an atomic_flag
我有一个 struct
,我们称它为 struct foo
,我想向其添加一个 atomic_flag
变量。到目前为止,我一直在 calloc
ing 结构,因为它主要需要进行零初始化。
我应该如何初始化 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_clear
或 atomic_flag_clear_explicit
函数将其初始化为已知状态。
我有一个 struct
,我们称它为 struct foo
,我想向其添加一个 atomic_flag
变量。到目前为止,我一直在 calloc
ing 结构,因为它主要需要进行零初始化。
我应该如何初始化 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 withATOMIC_FLAG_INIT
is initially in an indeterminate state.
并且没有指示 atomic_flag
类型是什么或它的内容,因此清零在这里没有帮助。
您需要使用宏或 atomic_flag_clear
或 atomic_flag_clear_explicit
函数将其初始化为已知状态。