c - 原子结构的用途
问题描述
根据 C11 § 6.5.2.3
Accessing a member of an atomic structure or union object results
in undefined behavior.
这是有道理的,因为您通常无法访问整个结构。那么为什么它_Atomic
也是一个类型限定符而不仅仅是一个类型说明符呢?
换句话说,一个合格的结构的目的是_Atomic
什么?我不允许读取或写入其中的任何元素。
#include <stdatomic.h>
struct {
int x;
} _Atomic foo;
int main(void) {
foo.x = 42; // write error
return foo.x; // read error
}
这两种访问foo.x
都会导致 GCC/Clang 中的警告/错误——这完全符合 C11 标准。为什么我要限定然后结构为_Atomic
?
解决方案
您不能访问单个成员,但始终可以访问整个结构。我认为,访问本应成为原子单元的部分内容并没有多大意义。
原子结构的典型用例是两个指针的组合,例如列表的头部和尾部。要操作这样的,struct
您必须将当前值从原子复制到临时值,修改它,然后再复制回来。这样一来,您始终可以保证存储的值在任何时候都是一致的。
默认情况下,对整个原子的所有此类操作struct
都具有顺序一致性。
推荐阅读
- powershell - Powershell parallel in function
- python - Python-selenium scrolling & find desired text
- c - SPI test case in C for Pulpissimo
- google-apps-script - How to use url fetch in google script with credentials and authorization header
- python - 如何使用函数使用 **kwargs 连接字符串?
- git - Git merge branch with another empty branch
- bash - Bash:如何在我的 openSSL 加密文件前加上 IV?
- angular - 我的游戏板元素无法显示在我的 html 文件中的原因是什么?
- c# - 带参数的 AspNetCore OData 函数没有元数据
- python - 在 Spyder 中导入 CV2 时出现 DLL 加载错误(在没有 Anaconda 的情况下直接安装)-python 3.7