我正在尝试在带有 clang 3.6.1 的 FreeBSD 10.1 版本上的 C
中使用原子,但是当我尝试在 上使用
变量我得到 ATOMIC_FLAG_INIT
编译程序时struct
中的 >atomic_flagerror: 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;
}
我可以在 structs
之外使用 atomic_flag
,如下例所示,但不能在 structs
中使用,那么如何在 中使用原子变量code>C
结构
?
#include <stdio.h>
#include <stdatomic.h>
int main(void)
{
atomic_flag flag = ATOMIC_FLAG_INIT;
return 0;
}
最佳答案
atomic_flag
没有您可以分配或读取的值,而只是一个内部状态。
与 atomic_flag
交互的唯一方法是为其定义的两个函数(如果算上 _explicit
版本,则为四个)。对于您通过 malloc
获取对象时的情况,该标志处于“不确定状态”(C11 的 7.17.8 p4)。您可以简单地通过应用两个函数之一将其置于已知状态,即使用 atomic_flag_clear
将其设置为“清除”状态,或使用 atomic_flag_test_and_set
设置它到“设置”状态。
在使用 malloc
分配后立即使用 atomic_flag_clear
是
相当于使用 ATOMIC_FLAG_INIT
初始化变量。
关于c - 在 malloc 的结构中初始化原子标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31526556/