在 malloc 的结构中初始化原子标志
Initializing an atomic flag in a malloc'd structure
我正在尝试在带有 clang 3.6.1 的 FreeBSD 10.1 版本的 C
中使用原子,但是当我尝试在 atomic_flag
变量上使用 ATOMIC_FLAG_INIT
编译程序时在 struct
我得到 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;
}
我可以在 structs
之外使用 atomic_flag
,如下例所示,但不能在 structs
中使用,那么如何在 C
[=18] 中使用原子变量=]?
#include <stdio.h>
#include <stdatomic.h>
int main(void)
{
atomic_flag flag = ATOMIC_FLAG_INIT;
return 0;
}
atomic_flag
没有可以赋值或读取的值,只有一个内部状态。
与 atomic_flag
交互的唯一方法是为它定义的两个函数(如果算上 _explicit
个版本,则为四个函数)。对于您通过 malloc
获得对象的情况,该标志位于 "indeterminate state" (C11 的 7.17.8 p4)中。您可以简单地通过应用两个函数之一将其置于已知状态,即使用 atomic_flag_clear
将其设置为 "clear" 状态,或使用 atomic_flag_test_and_set
将其设置为 "set"状态。
在 malloc
分配后立即使用 atomic_flag_clear
是
相当于用 ATOMIC_FLAG_INIT
.
初始化变量
我正在尝试在带有 clang 3.6.1 的 FreeBSD 10.1 版本的 C
中使用原子,但是当我尝试在 atomic_flag
变量上使用 ATOMIC_FLAG_INIT
编译程序时在 struct
我得到 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;
}
我可以在 structs
之外使用 atomic_flag
,如下例所示,但不能在 structs
中使用,那么如何在 C
[=18] 中使用原子变量=]?
#include <stdio.h>
#include <stdatomic.h>
int main(void)
{
atomic_flag flag = ATOMIC_FLAG_INIT;
return 0;
}
atomic_flag
没有可以赋值或读取的值,只有一个内部状态。
与 atomic_flag
交互的唯一方法是为它定义的两个函数(如果算上 _explicit
个版本,则为四个函数)。对于您通过 malloc
获得对象的情况,该标志位于 "indeterminate state" (C11 的 7.17.8 p4)中。您可以简单地通过应用两个函数之一将其置于已知状态,即使用 atomic_flag_clear
将其设置为 "clear" 状态,或使用 atomic_flag_test_and_set
将其设置为 "set"状态。
在 malloc
分配后立即使用 atomic_flag_clear
是
相当于用 ATOMIC_FLAG_INIT
.