初始化atomic_flag

问题描述 投票:5回答:1

我有一个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这个相关的Jens Gustedt建议零/默认初始化只适用于atomic_flags。我如何知道它是否被接受?

c atomic c11 stdatomic atomicinteger
1个回答
4
投票

C11标准在7.17.8p4上说:

未使用atomic_flag明确初始化的ATOMIC_FLAG_INIT最初处于不确定状态。

并没有迹象表明atomic_flag类型是什么或它的内容,所以零在这里没有帮助。

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

© www.soinside.com 2019 - 2024. All rights reserved.