首页 > 解决方案 > 自然对齐+易失性= C++ 11中的原子?

问题描述

1) 以下是自然对齐指针的声明:

alignas(sizeof(void *)) volatile void * p;

相当于

std::atomic<void *> 

在 C++11 中?

2) 更准确地说,假设这种类型的指针将以与 C++11 中的 std::atomic 相同的方式工作是否正确?

标签: c++11atomicvolatilestdatomic

解决方案


不, volatile 不保证该位置将被原子地写入或读取,只是编译器无法优化多次读取和写入。

在某些架构上,如果正确对齐,处理器将自动读取或写入,但这不是通用的,甚至不能通过一系列处理器来保证。在可能的情况下,atomic 的内部实现将利用架构特性和 atomic 指令修饰符,那么为什么使用 atomic,如果你指的是 atomic 呢?


推荐阅读