【发布时间】:2019-08-27 19:32:08
【问题描述】:
我想制作一个小型 C 结构 atomic 的全部内容,但 the documentation 似乎表明只有原始数据类型作为结构中的字段才能被原子化。
例如,我想做:
#include <stdint.h>
#include <stdbool.h>
#include <stdatomic.h>
typedef struct my_obj_s {
int16_t a;
int16_t b;
bool is_initialized;
} my_obj_t;
_Atomic my_obj_t my_atomic_object;
但似乎只能做到:
typedef struct my_obj_s {
atomic_char16_t a;
atomic_char16_t b;
atomic_bool is_initialized;
} my_obj_t;
有没有办法在比原始数据类型更大的任何东西上实现原子性(在锁/互斥体/等中没有括号读/写)?
【问题讨论】:
-
从您链接的文档中:“类型名称 - 数组或函数以外的任何类型。”所以是的,您可以将 _Atomic 用于结构。