在 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.

初始化变量