【发布时间】:2015-07-20 21:20:04
【问题描述】:
我正在尝试在带有 clang 3.6.1 的 FreeBSD 10.1 Release 上的 C 中使用原子,但是当我尝试在 atomic_flag 中的 atomic_flag 变量上使用 ATOMIC_FLAG_INIT 编译程序时,我得到了 @ 987654325@.
这是我要编译的程序。
#include <stdio.h>
#include <stdatomic.h>
struct map
{
atomic_flag flag;
};
int main(void)
{
struct map *m = malloc(sizeof(struct map));
m->flag = ATOMIC_FLAG_INIT;
free(m);
return 0;
}
我可以在structs 之外使用atomic_flag,如下例所示,但不能在structs 中使用,那么如何在C structs 中使用原子变量?
#include <stdio.h>
#include <stdatomic.h>
int main(void)
{
atomic_flag flag = ATOMIC_FLAG_INIT;
return 0;
}
【问题讨论】:
-
您知道
m未初始化吗? -
是的,但即使初始化结构也会出现相同的编译器错误。
-
我应该将其标记为“注释”。当然,这并不能解决错误。但是,如果你创建一个自动变量呢?
-
根据您的使用情况:您可以改用
atomic_bool并使用atomic_init。不确定atomic_flag是否也允许使用后者。对我来说,atomic_flag看起来更像是实现所有其他原子类型的基本辅助类型。 IOW:最小公分母。 -
这不是 FreeBSD 特有的,也不是 clang 特有的。我可以建议将标题更改为更通用一点。像“初始化 malloc 结构中的原子标志”之类的东西?
标签: c struct atomic freebsd c11