我正在尝试在FreeBSD 10.1 Release上使用clang 3.6.1编译器中的C原子操作。但是,当我尝试编译一个使用结构体中的atomic_flag变量及其ATOMIC_FLAG_INIT宏定义的程序时,出现“error:expected expression”的错误提示。
以下是我尝试编译的程序:
我可以像下面的例子那样在结构体外使用
以下是我尝试编译的程序:
#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;
}
我可以像下面的例子那样在结构体外使用
atomic_flag
,但是在结构体中却不能使用,那么如何在 C
的结构体中使用原子变量呢?#include <stdio.h>
#include <stdatomic.h>
int main(void)
{
atomic_flag flag = ATOMIC_FLAG_INIT;
return 0;
}
m
没有初始化吗? - too honest for this siteatomic_bool
,并使用atomic_init
。不确定后者是否也允许对atomic_flag
进行操作。对我来说,atomic_flag
更像是实现所有其他原子类型所需的基本辅助类型。换句话说:是最小公共分母。 - too honest for this site