5

我有一个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 };

编辑:

我发现Jens Gustedt的这个相关DR#421建议将零/默认初始化设置为仅适用于s。我怎样才能知道它是否被接受?atomic_flag

4

1 回答 1

5

C11 标准在 7.17.8p4 上说:

atomic_flag未显式初始化的 AnATOMIC_FLAG_INIT最初处于不确定状态。

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

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

于 2019-04-02T13:43:06.860 回答