gpt4 book ai didi

c - C中的原子结构?

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:15 25 4
gpt4 key购买 nike

我想让一个小的 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 限定符。

有了这些结构,您基本上只能通过 atomic_... 类型的泛型函数(或通过结构分配)访问受限的可能性,您无法访问各个字段。这些函数中最有用的可能是 atomic_compare_exchange_weak

如果您的结构不适合宽寄存器,平台通常会使用某种存储在结构外部的锁来实现这些原子类型。如果是这样,他们将使用平台的 native 功能。这些属性可能取决于您的编译器选项,特别是您必须确保所有编译对象的这些属性都相同。

对于 gcc,通常 -march=native 会为此触发最佳功能,例如,如果可用,则使用 128 位 native 原子。

关于c - C中的原子结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57681154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com