c++11 - 自然对齐+易失性= C++ 11中的原子?
问题描述
1) 以下是自然对齐指针的声明:
alignas(sizeof(void *)) volatile void * p;
相当于
std::atomic<void *>
在 C++11 中?
2) 更准确地说,假设这种类型的指针将以与 C++11 中的 std::atomic 相同的方式工作是否正确?
解决方案
不, volatile 不保证该位置将被原子地写入或读取,只是编译器无法优化多次读取和写入。
在某些架构上,如果正确对齐,处理器将自动读取或写入,但这不是通用的,甚至不能通过一系列处理器来保证。在可能的情况下,atomic 的内部实现将利用架构特性和 atomic 指令修饰符,那么为什么不使用 atomic,如果你指的是 atomic 呢?
推荐阅读
- vue.js - 导入 vue 模板片段导致 [Object Promise]
- vb.net - 如何将访问数据(Credentail)传递给 HttpClient?
- c++ - 无法将元素添加到容器中
如果 T 具有显式构造函数,则使用 emplace new - java - 带有 finally 块和递归的 Java 谜语
- javascript - JavaScript:仅在几秒钟后拨打电话
- java - 如何从存储在地图中的枚举中检索值?
- vue.js - vee-validate 在控制台中验证不存在的字段错误
- flutter - 断言失败:第 137 行 pos 15:'assetName != null':不正确。在颤振中
- c# - 如何通过动画师每 60 秒更换一次动画?
- c - 应用 if 条件在 C 中创建文本文件